Autor | Zpráva | ||
---|---|---|---|
Keilew Profil |
#1 · Zasláno: 28. 4. 2009, 09:20:04
Omlouvám se za porušení slibu sem nepsat, ale zoufalost při řešení následující otázky si žádá i takovýto krok.
Otázka je vlastně prostá. Mám dva různé vyhledávací řetězce, oba by měly najít slovo "černobílá", avšak druhý toto slovo při vší snaze nenajde (jde tradičně o znaky ž, š, č, ř): 1) SELECT * FROM `sklad` WHERE `popis1` LIKE '%cernobílá%' COLLATE utf8_general_ci 2) SELECT * FROM `sklad` WHERE MATCH (`popis1`) AGAINST ('cernobílá' COLLATE utf8_general_ci IN BOOLEAN MODE) Mají pro to nějaký pádný důvod? COLLATE je nastaveno stejně, ale předpokládám, že u MATCH-AGAINST nefunguje. Je nějaké řešení, aby mohl uživatel píšící "cesky" pracovat takto naprogramovaným fulltextem? Podotázka - najít "automobil" pomocí MATCH AGAINST ze slova "auto" jde snadno, stačí použít 'auto*'. Ale dá se najít takto "superauto"? Řetězec '*auto' nereaguje... |
||
Kajman_ Profil * |
#2 · Zasláno: 28. 4. 2009, 10:26:33
Co vynechat collate v dotaze a nastavit ho u sloupečku popis1? Tipnul bych, že slovo v against se přispůsobí porovnání definovaného u sloupečků definovaného v match. Ani v manuálu není zmínka, že by collate šlo v against použít.
http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html A je nutný BOOLEAN MODE? Nebude lepší si ten fulltextový index vytvořit nastálo? Ale dá se najít takto "superauto"? Přes fulltext ne. |
||
Keilew Profil |
#3 · Zasláno: 28. 4. 2009, 13:06:52
Ad BOOLEAN MODE: to není obezlička kvůli neexistenci fulltextového indexu, ale aby šlo používat rozšiřující operátory (+,-,*...).
K tvému řešení - s utf8_general_ci namísto utf8_czech_ci přímo na sloupečku to samozřejmě funguje, jak má. Ovšem problémem je, když budu chtít tento sloupeček česky seřadit. Pokud se nepletu, tak utf8_general_ci zařadí špatně diakritiku. Jediné řešení, které mě doposavad napadlo, je dát na sloupce ve fulltextu utf8_general_ci a případné ORDER BY řešit jako zde: http://dev.mysql.com/doc/refman/5.0/en/charset-collate.html Ale že by to bylo překrásné řešení, to se říct nedá... |
||
breeta Profil * |
#4 · Zasláno: 28. 4. 2009, 14:57:37
a Když dáš před dotaz pro vyhledání s tabulky tenhle kod
mysql_query("SET NAMES 'utf8'") or die('Could not set names'); a vhledaš to momocí LIKE, tak to tak nejde? mysql_query("SET NAMES 'utf8'") or die('Could not set names'); SELECT * FROM sklad WHERE popis1 LIKE %černobílá% |
||
Keilew Profil |
#5 · Zasláno: 28. 4. 2009, 17:56:32
breeta
Na LIKE se neptám, tam to funguje. Ta změna COLLATE bohužel fakt nejde použít pro fulltext. Fulltext se dá řešit buď jak píšu výše, nebo redundantním sloupcem s klíčema pro fulltext, který bude mít nastaven utf8_general_ci. Lepší je jak co, jak kdy. |
||
Časová prodleva: 15 let
|
0