Zum Inhalt springen
ThreadPHP & MySQL

MySQL und die Suche nach Umlauten

Kategorie
PHP & MySQL
Gelesen
7142
Antworten
7
Erstellt von: gelöschter BenutzerDatum: 24.06.2010, 17:03 Uhr
Archiv-KommentarArchiviert, nicht priorisiertCMS & technische Umsetzung

Redaktionelle Einordnung

Diese archivierte Diskussion behandelt MySQL und die Suche nach Umlauten aus Sicht der Rubrik PHP & MySQL.

CMS- und Technikfragen sind heute besonders dann relevant, wenn sie Indexierung, Rendering, interne Verlinkung oder Relaunch-Risiken beeinflussen.

Sinnvoll nutzbar bleibt der Thread vor allem als historischer Kontext, für typische Fragestellungen und zur Einordnung älterer Empfehlungen.

Startbeitrag

Originaler Foreninhalt in modernisierter Darstellung.

Zur Kategorie
gelöschter Benutzer
Threadstart · PHP & MySQL 7142 mal gelesen · 24.06.2010, 17:03 Uhr

Hallo zusammen,

ich habe ein Problem mit MySQL und ich fürchte fast, es gibt keine saubere Lösung dafür. Aber seht selbst:

Ich habe ein VARCHAR-Feld mit dem namen voc_text. Die Kollation des Feldes ist utf8_unicode_ci. In der Spalte befinden sich mehrere Einträge, unter Anderem iacÄ“re und iăcÄ•re. Nun führe ich folgende Query aus:

[SQL]
SELECT voc_text
FROM `voc_vocables`
WHERE `vocable_text` LIKE 'iăcĕre'
[/SQL]

Zurückgegeben werden mir beide Einträge, gleiches Ergebnis wenn ich mit = statt LIKE arbeite. Ich hab schon ein wenig gegoogelt und wurde diese funktionsweise für SQL festgelegt.
Kennt vielleicht jemand eine Möglichkeit, um dieses Problem drumherum zu kommen, ohne die Selektierung in PHP vorzunehmen?

Antworten

7 Beiträge
Foren Moderator Evil Genius Content Halbgott (973 Beiträge)
am 24.06.2010, 20:15 Uhr schrieb matthes
Antwort

Spricht was gegen die Umstellung der Kollation auf utf8_bin? Dann sollte es stimmen...


Make Seitenreport great again!
gelöschter Benutzer
am 24.06.2010, 21:22 Uhr schrieb
Antwort

Das fehlende ci

Ich befürchte fast, ich suche die eierlegende Wollmichsau

Consultant Content Halbgott (743 Beiträge)
am 24.06.2010, 21:27 Uhr schrieb lwulfe
Antwort

Hallo Oskar,
ginge es vielleicht mit Wildcards?

SELECT voc_text
FROM `voc_vocables`
WHERE `vocable_text` LIKE \'i?c?re\'

Aber wirklich empfehlen würde ich dir bei dem Problem ein MySQL-Forum ...

gelöschter Benutzer
am 24.06.2010, 21:45 Uhr schrieb
Antwort

Liefert komischerweise gar kein Ergebnis o_O

Nunja, ich denke ich werde erstmal beim Selektieren mit PHP bleiben.
Für größere Tests ist dann Zeit, wenn die Semesterferien (endlich) beginnen

Dank euch beiden trotzdem für eure Bemühungen

gelöschter Benutzer
am 24.06.2010, 21:53 Uhr schrieb
Antwort

Hallo Oskar

Ich rate jetzt mal das deine MySql möglicherweise Iso formatiert ist und die Kollation alleine nicht ausreicht.

Da könnte ein mysql_set_charset(\'utf8\'); oder mysql_query("SET NAMES \'utf8\'"); unter Umständen om Skript hilfreich sein.

Gruß
Jörg

gelöschter Benutzer
am 24.06.2010, 22:11 Uhr schrieb
Antwort

Der Zeichensatz wird direkt nach der Verbindung mittels "SET NAMES \'utf8\'" umgestellt.

gelöschter Benutzer
am 24.06.2010, 23:32 Uhr schrieb
Antwort

Das Problem ist die Verarbeitung von Umlauten und Sonderzeichen durch MySQL.
utf8_bin verwandelt ein nicht in ein A, aber auf die Grosskleinschreibung kommt es drauf an.
utf8_unicode_ci macht genau das Gegenteil, ist also auch nicht gewünscht.
utf8_bin_ci wäre also das gesuchte, aber das gibt es nicht.

Allerdings lässt sich das wie folgt simulieren:
[sql]
SELECT voc_text
FROM `voc_vocables`
WHERE LOWER(\'vocable_text\') = LOWER(\'iăcĕre\')
[/sql]Kollation: utf8_bin