Autor Zpráva
rentyer
Profil *
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 *
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 *
rentyer:
Podle mě ti bude stačit strtr, protože Latin2 má jen 256 znaků a ty jich chceš 128 nahradit.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0