Tech Life

Ilustrační obrázek

Porovnávání českých řetězců v Javě a v MySQL

25. 09. 2008 00:00    kategorie: Tech Life    autor: PŠi    komentářů: 0

Zkuste si tipnout, co vrátí následující SQL dotaz, při použití MySQL 4.1, CHARSET=utf8 a COLLATE=utf8_czech_ci, což je správné české řazení bez ohledu na velikost písmen.

SELECT 'česko' = 'cesko', 'škoda' = 'skoda', 'pěkně' = 'pekne';
 

Výsledek bude následující: 0;0;1

MySQL totiž pro češtinu v základu rozlišuje pouze c != č, r != ř, s != š a z != ž a tedy i e = ě nebo d = ď.

Otázka zní Jak dosáhnout stejného porovnávání i v Javě?

Pokud vám dotaz vrací jiné výsledky, tak si přepněte správně kódování:
Druhý příkaz teprve nastavuje správné české porovnávání pro vaše spojení (default je totiž utf8_general_ci).

Po delším experimetování a málem i naprogramování si to sám jsem nalezl celkem elegantní a hlavně fungující postup. Vytvořte si instanci Collatoru pro české locale a pak mu nastavte sílu porovnávání na nejnižší možnou a tedy PRIMARY (navzájem se mají odlišovat pouze zcela jiné znaky bez ohledu na velikost nebo nabodeníčka).

Čeština má takto vytvořený Collator nastaven právě tak, že se odlišují pouze 4 výše zmíněné znaky a pak ještě naše ch.

Nyní lze již lehce použít pro porovnávání:

Pozor ale na to, že v něm již nebude správně fungovat řazení a tedy 0 == MySQLCollator.compare(”Ě”, “e”);

Sdílet odkaz:
tisk

Diskuze k článku

K článku nebyl zatím přidán komentář.

Přidat příspěvek

 

Kontakt pro média


Máte zájem o další informace, odborný článek či přednášku na konferenci? Kontaktujte nás prosím na pr@etnetera.cz.

RSS - Tech life


RSS kanál Tech Life Blogu

Offlineblog

Offlineblog

Ljama


Komix z prostředí imaginární firmy.

ljama

Ještě jste ho nečetli? Tak tudy ...

 
Doporučujeme: Nabídka práce, volná pracovní místa - pracovní portál SPRÁVNÝKROK.CZ