Stellen wir uns vor, dass ich diese Seite Titel in meinem Wiki haben (MediaWiki 1.19.4):Wie wird eine Suche nach Groß- und Kleinschreibung in der MediaWiki-Datenbank durchgeführt?
SOMETHIng
Sómethìng
SomêthÏng
SÒmetHínG
Wenn ein Benutzer something
sucht Ich möchte, dass alle vier Seiten als Ergebnis zurückgegeben werden.
das einzige, was im Moment ich denken könnte, ist diese Abfrage (MySQL Percona 5.5.30-30.2):
SELECT page_title
FROM page
WHERE page_title LIKE '%something%' COLLATE utf8_general_ci
die nur SOMETHIng
zurückgibt.
ich auf dem richtigen Weg sein muss, weil wenn ich die Suche sóméthíng
OR SÓMÉTHÍNG
, bekomme ich SOMETHIng
als das Ergebnis. Wie kann ich die Abfrage ändern, damit die anderen Ergebnisse wie erwartet angezeigt werden? Die Leistung ist hier nicht kritisch, da die page
Tabelle nur ~ 2K Zeilen enthält.
Dies ist die Tabellendefinition mit dem entsprechenden Bits:
CREATE TABLE page (
(...)
page_title VARCHAR(255) NOT NULL DEFAULT '' COLLATE latin1_bin,
(...)
UNIQUE INDEX name_title (page_namespace, page_title),
)
Die Tabellendefinition darf nicht geändert werden, da dies eine Installation von MediaWiki Lagern und AFAIK erwartet von seinem Code in dieses Feld auf diese Weise definiert ist, (dh Unicode als Binärdaten gespeichert).
, danke für das Teilen. Ich weiß, Leistung ist in Ihrem Fall nicht entscheidend, aber es wäre interessant zu wissen, welche Auswirkungen es hat. – agim
@agim: Bei einer Abfrage wie "% keyword%" sollte es keinen großen Unterschied geben, da MySQL ohnehin einen Table Scan (oder zumindest einen Index Scan) durchführen muss. Eine Abfrage wie "Präfix%" sollte jedoch viel schneller sein, wenn die Spalte richtig sortiert wurde. –