Autor Zpráva
xlifer
Profil
Když použiju dotaz na výběr záznamu z mySQL db:

1) vrací výsledky.

select * from tabulka where text LIKE '%Čápy%'


2) nevrací nic, žádné výsledky.

select * from tabulka where text LIKE '%Čápy%' COLLATE uft8_czech_ci


Myslel jsem, že použítím COLLATE vyřeším to, aby bylo vyhledáváno slovo bez ohledu na velikost písmen a případně i diakritiku.

Ale asi to tak není?

Kde je tedy chyba?

Moderátor Kajman: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Kajman_
Profil *
Jaká znaková sada je použita pro spojení? Jsou data v tabulce bezchybně uložena (odpovídá znaková sada a obsah)?
xlifer
Profil
MySql_Query("SET character_set_client=cp1250");
MySql_Query("SET character_set_connection=cp1250");
MySql_Query("SET character_set_results=cp1250");


Nevím jak zjistím, že data v tabulce jsou bezchybně uložena? Nevím jak poznám, že data jsou špatně uložené, ale žádné problémy jinak ś datama nejsou.
Kajman_
Profil *
Uložení diakritiky lze např. běžně zkontrolovat zobrazením dat z tabuky v pma nebo admineru. A když to budete mít puštěné, zkusil bych dotaz tam, zda se bude chovat stejně.

A vrací se prázdná množina, nebo to skončí chybou?
http://dev.mysql.com/doc/refman/5.1/en/charset-collation-charset.html
xlifer
Profil
Vrací mi to přímo v admineru chybu

#1253 - COLLATION 'cp1250_czech_cs' is not valid for CHARACTER SET 'utf8'
Kajman_
Profil *
Což je způsobené neplatnou kombinací znakové sady a porovnání, zmíněnou v onom odkaze.
xlifer
Profil
Ano, to jsem pochopil, ale nevím jak to vyřešit? Co v db nastavit?

Při výpisu SHOW COLLATE cp1250% je cp1250_czech_cs compiled.
Kajman_
Profil *
Stejná znaková sada musí být pro
- sloupeček tabulky
- zvolené collation
- řetězec zadávaný ručně v like (jeho znakovou sadu ovlivňuje nastavení spojení - set names - v případě potřeby, lze v dotazu převést)
xlifer
Profil
Kajman:

- sloupeček tabulky mám nastaven na cp1250_czech_cs

- zvolené collation v dotazu volám taky správně cp1250_czech_cs

- u řetezce zadávaného ručně se nevím přesně rady jak je to myšleno:

zkouším toto, ale nedaří se?

set names cp1250;
select * from tabulka where text LIKE '%Čápy%' COLLATE cp120_czech_cs


Moderátor Kajman: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Kajman_
Profil *
A v admineru např. tohle jde?
select * from tabulka where `text` LIKE convert(_UTF8'%Čápy%' using cp1250) COLLATE cp1250_czech_cs
xlifer
Profil
Jde, ale nezobrazí mi to žádná data na výsledek.

Když to upravím takto, tak to data vypíše: (i když je zvlaštní convert cp1250 to 1250 :-)

select * from tabulka where `text` LIKE convert(_cp1250'%Čápy%' using cp1250) COLLATE cp1250_czech_cs
Kajman_
Profil *
Pokud tenhle poslední dotaz vypíše něco v admineru, který používá defaultně spojení se znakovou sadou UTF8, tak bych tipnul, že máte špatně uloženou diakritiku u řádků, které očekáváte na výstupu při tomto hledání.

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: