Ich habe eine MySQL-Tabelle mit utf8 allgemeiner ci-Kollatierung. In der Tabelle sehe ich zwei Einträge:
ein schlechter
ein schlechter
Ich verwende eine Abfrage, die folgendermaßen aussieht:
SELECT * FROM `words` WHERE `Word` = 'abád'
Das Abfrageergebnis liefert beide Wörter:
ein schlechter
ein schlechter
Gibt es eine Möglichkeit zu zeigen, dass MySQL nur das Wort mit Akzent finden soll? Ich möchte, dass die Abfrage nur zurückgegeben wird
ein schlechter
Ich habe diese Abfrage auch ausprobiert:
SELECT * FROM `words` WHERE BINARY `Word` = 'abád'
Es gibt mir keine Ergebnisse. Danke für die Hilfe.
Wenn Ihre Suchen in diesem Feld immer akzentabhängig sind, deklarieren Sie die Kollatierung des Felds als utf8_bin (damit werden die utf8-codierten Bytes gleichgestellt), oder verwenden Sie eine sprachspezifische Kollatierung, die zwischen Akzent und Un unterscheidet Zeichen mit Akzent
col_name varchar(10) collate utf8_bin
Wenn die Suche in der Regel auf Akzente verzichtet, Sie jedoch eine Ausnahme für diese Suche festlegen möchten, versuchen Sie es;
WHERE col_name = 'abád' collate utf8_bin
In meiner Version (MySql 5.0) ist kein utf8-Zeichensatz für die Suche nach Groß- und Kleinschreibung verfügbar. Die einzige akzentempfindliche Sortierung für utf8 ist utf8_bin. Es ist jedoch auch case sensitive.
Meine Arbeit bestand darin, so etwas zu verwenden:
SELECT * FROM `words` WHERE LOWER(column) = LOWER('aBád') COLLATE utf8_bin
Der MySQL-Fehler zum Nachschlagen ist http://bugs.mysql.com/bug.php?id=19567 .
Ich habe den gleichen Fehler bekommen.
Ich habe die Kollatierung meiner Tabelle in utf8_bin (über phpMyAdmin) geändert und das Problem wurde behoben.
Ich hoffe es hilft! :)
Prüfen Sie, ob der Sortierungstyp der Datenbanktabelle mit "_ci" endet. Dies steht für Groß- und Kleinschreibung.
Ändern Sie es in die Sortierung desselben oder des nächstgelegenen Namens ohne "_ci" ...
Zum Beispiel ... ändern Sie "utf8_general_ci" in "utf8_bin" Mke
Die akzeptierte Antwort ist gut, aber beachten Sie, dass Sie stattdessen COLLATE utf8mb4_bin verwenden müssen!
WHERE col_name = 'abád' collate utf8mb4_bin
Behebt Fehler wie:
MySQL sagte: Dokumentation 1253 - COLLATION 'utf8_bin' ist nicht gültig für Zeichensatz 'utf8mb4'
Nun, Sie haben gerade beschrieben, worum es sich bei utf8_general_ci-Kollatierung handelt (a, á, à, â, ä, å ... å, alles gleich einem im Vergleich).
In MySQL-Server 5.1 wurden auch Änderungen in Bezug auf utf8_general_ci und utf8_unicode_ci vorgenommen, sodass die Serverversion davon abhängig ist. Überprüfen Sie besser die Dokumente.
Wenn es sich um MySQL Server 5.0 handelt, würde ich utf8_unicode_ci anstelle von utf8_general_ci wählen, was für Ihren Anwendungsfall offensichtlich falsch ist.
SELECT * FROM `words` WHERE column = 'abád' collate latin1_General_CS
(oder Ihre Kollatierung einschließlich cs)
Sie können versuchen, nach der Hex-Variablen des Zeichens HEX () in mysql zu suchen und eine ähnliche Funktion in Ihrer Programmiersprache zu verwenden und diese abzugleichen. Dies funktionierte gut für mich, als ich eine Auflistung machte, in der eine Person den ersten Buchstaben einer Person auswählen konnte.
Das funktioniert für mich für eine Akzent- und Groß-/Kleinschreibung in MySQL-Server 5.1 in einer Datenbank in utf8_general_ci, wobei Spalte ein LONGBLOB ist.
select * from words where '%Word%' LIKE column collate utf8_unicode_ci
mit
select * from words where'%Word%' LIKE column collate utf8_general_ci
das Ergebnis ist Groß- und Kleinschreibung, jedoch nicht akzentempfindlich.