Facciamo finta che ho questi i titoli delle pagine nel mio wiki (MediaWiki 1.19.4):Come eseguire una ricerca con accento e senza distinzione tra maiuscole e minuscole nel database MediaWiki?
SOMETHIng
Sómethìng
SomêthÏng
SÒmetHínG
Se un utente cerca something
voglio che tutte le 4 pagine vengono restituiti come risultato.
Al momento l'unica cosa che potevo pensare è questa query (MySQL Percona 5.5.30-30.2):
SELECT page_title
FROM page
WHERE page_title LIKE '%something%' COLLATE utf8_general_ci
che restituisce solo SOMETHIng
.
devo essere sulla strada giusta, perché se cerco sóméthíng
O SÓMÉTHÍNG
, ottengo SOMETHIng
come risultato. Come posso modificare la query in modo da ottenere gli altri risultati come previsto? La prestazione non è critica in quanto la tabella page
contiene solo ~ righe da 2 K.
Questa è la definizione della tabella con i corrispondenti bit:
CREATE TABLE page (
(...)
page_title VARCHAR(255) NOT NULL DEFAULT '' COLLATE latin1_bin,
(...)
UNIQUE INDEX name_title (page_namespace, page_title),
)
La tabella di definizione non deve essere modificato, in quanto si tratta di un'installazione magazzino di MediaWiki e AFAIK suo codice aspetta questo campo essendo definita in questo modo (cioè unicode memorizzato come dati binari).
ben spiegato, grazie per averlo condiviso. Lo so, le prestazioni nel tuo caso non sono cruciali, ma sarebbe interessante sapere quale impatto ha. – agim
@agim: A occhio e croce, con una query come ''% keyword%'' non dovrebbe esserci molta differenza, dal momento che MySQL deve eseguire comunque una scansione della tabella (o almeno una scansione dell'indice). Tuttavia, una query come ''prefix%'' dovrebbe essere molto più veloce se la colonna è stata correttamente fascicolata per cominciare. –