Autor | Zpráva | ||
---|---|---|---|
rentyer Profil * |
#1 · Zasláno: 8. 1. 2017, 23:44:21
Mám DB i tabulky v latin2 (collation latin2_czech_cs)
A při vyhledávacím spojení bych potřeboval např. při zadání fráze "reporyje" vyhledat i "Řeporyje" všeobecná rada s přidáním "COLLATE utf8_general_ci" mi nefunguje, jelikož potřebuji výstupy v latin2 a vstup mám též v latin2. Kódovaní tabulek měnit nemůžu. Nyní používám tento příkaz: SELECT * FROM latin2_tabulka WHERE LOWER(nazev) LIKE CONCAT(LOWER('".$query."')) jak to mám řešit? |
||
Keeehi Profil |
rentyer:
Myslím si, že v tom případě jen napsáním si funkce, která diakritiku odstraní. A aby to nebylo příšerně pomalé, tak si vytvoř druhý sloupec, ve kterém bude ten název bez diakritiky a vyhledávej nad ním. Ještě dvě poznámky K čemu tam máš concat, když má jen jeden argument? K čemu tam máš like, když tam nepoužíváš ty pseudo regulární znaky? Obyčejné porovnání by bylo lepší. Tedy jedině že by ty znaky byly součástí $query. „jelikož potřebuji výstupy v latin2 a vstup mám též v latin2“ Víš že se dají vstupy a výstupy překódovat? Pokud vstup a výstup aplikace musí být latin2, může aplikace vstup překódovat na utf-8 a to uložit do databáze a naopak data získaná z databáze před vrácením na výstup překódovat zase do latin2. |
||
rentyer Profil * |
#3 · Zasláno: 10. 1. 2017, 09:52:53
Dík za přínosné připomínky......
1) LIKE / CONCAT je pozůstatek po dřívější verzi vyhledávání , nyní ho nahradím rovností 2) Předělávat tabulky do UTF-8 nehodlám 3) Napíšu si funkci na odstranění diakritiky.... 4) Co byste doporučili na indentifikaci diakritiky u řetězců v latin2 kódování? preg_match a regulár bude asi moc pomalý, je nějaký rychlejší a méně náročnější fígl na identifikaci, že daný řetězec obsahuje diakritiku v Latin2? Díky předem. |
||
juriad_ Profil * |
#4 · Zasláno: 10. 1. 2017, 10:12:49
rentyer:
Podle mě ti bude stačit strtr, protože Latin2 má jen 256 znaků a ty jich chceš 128 nahradit. |
||
Časová prodleva: 6 let
|
0