Autor Zpráva
Keilew
Profil
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 *
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
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 *
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
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.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0