Sortowanie i wyszukiwanie treści w językach polskim, rumuńskim i ukraińskim

0

Hej
robię projekt z użyciem Postgresa. Skrypt bazy

CREATE DATABASE recruitment
    WITH
    OWNER = recruit
    ENCODING = 'UTF8'
    LC_COLLATE = 'C'
    LC_CTYPE = 'C'
    TABLESPACE = pg_default
    CONNECTION LIMIT = -1
    IS_TEMPLATE = False;

w bazie będę chciał przechowywać polskie, rumuńskie i być może ukraińskie znaki.
Na kilku testowych polskich wpisach np. orderBy(c => c.name) nie sortuje wyników poprawnie np. Ćwiek, Giertych, Lama
sortuje Giertych, Lama, Ćwiek

Podejrzewam, że jest to kwestia odpowiedniej kreacji db.
Co powinienem zrobić?
Do wyszukiwanie jeszcze nie doszedłem - możliwy problem znaków i dużych małych liter?

0

Pewnie to co napiszę to będzie jakiś overenginering, ale może zrób sobie słownik polskich znaków i jakim one odpowiadają zwykłym i zrób replace?

public class Item
{
  public string Name { get; set; }

  public Item(string name)
  {
    Name = name;
  }
}

List<Item> lista = new List<Item>()
{
  new Item("Lama"),
  new Item("Ćwiek"),
  new Item("Giertych"),
};

Dictionary<char, char> slownik = new Dictionary<char, char>()
{
  {'ć','c'}
};

lista = lista.OrderBy(x =>
{
  if (slownik.Any(y => y.Key == x.Name.ToLower().First()))
  {
    x.Name = x.Name.Replace(x.Name.ToLower().First(), slownik[x.Name.ToLower().First()]);
  }
  return x.Name;
}).ToList();
1
john_doe napisał(a):

Hej
robię projekt z użyciem Postgresa. Skrypt bazy

CREATE DATABASE recruitment
    WITH
    OWNER = recruit
    ENCODING = 'UTF8'
    LC_COLLATE = 'C'
    LC_CTYPE = 'C'
    TABLESPACE = pg_default
    CONNECTION LIMIT = -1
    IS_TEMPLATE = False;

w bazie będę chciał przechowywać polskie, rumuńskie i być może ukraińskie znaki.
Na kilku testowych polskich wpisach np. orderBy(c => c.name) nie sortuje wyników poprawnie np. Ćwiek, Giertych, Lama
sortuje Giertych, Lama, Ćwiek

Zgodnie ze stroną kodową ustawioną po stronie bazy danych...

Podejrzewam, że jest to kwestia odpowiedniej kreacji db.

Tak i nie.
To kwestia strony kodowej, która ustawia się w momencie tworzenia DB.
Ale można to zmienić nawet dla zapytania...

Co powinienem zrobić?

Przeczytać ze zrozumieniem dokumentację.
Może zacznij od tego:
https://www.npgsql.org/efcore/misc/collations-and-case-sensitivity.html

Do wyszukiwanie jeszcze nie doszedłem - możliwy problem znaków i dużych małych liter?

Oczywiście, że może być taki problem.

1

LC_COLLATE = 'C'

Tu się prosisz o sortowanie po codepointsach, czyli to co dostajesz.

0

co powinienem tutaj ustawić?

1 użytkowników online, w tym zalogowanych: 0, gości: 1