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 * |
#2 · Zasláno: 20. 9. 2010, 11:22:17
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 |
||
Časová prodleva: 15 dní
|
|||
xlifer Profil |
#5 · Zasláno: 5. 10. 2010, 11:18:34
Vrací mi to přímo v admineru chybu
#1253 - COLLATION 'cp1250_czech_cs' is not valid for CHARACTER SET 'utf8' |
||
Kajman_ Profil * |
#6 · Zasláno: 5. 10. 2010, 12:30:18
Což je způsobené neplatnou kombinací znakové sady a porovnání, zmíněnou v onom odkaze.
|
||
xlifer Profil |
#7 · Zasláno: 5. 10. 2010, 12:33:47
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 * |
#8 · Zasláno: 5. 10. 2010, 13:01:36
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 * |
#10 · Zasláno: 5. 10. 2010, 15:26:14
A v admineru např. tohle jde?
select * from tabulka where `text` LIKE convert(_UTF8'%Čápy%' using cp1250) COLLATE cp1250_czech_cs |
||
xlifer Profil |
#11 · Zasláno: 5. 10. 2010, 16:50:19
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 * |
#12 · Zasláno: 6. 10. 2010, 09:06:04
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í.
|
||
Časová prodleva: 14 let
|
0