MySQL passenden unicode-Zeichen mit ascii-version
Ich bin mit MySQL 5.1.50 und haben eine Tabelle, die wie folgt aussieht:
organizations | CREATE TABLE `organizations` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`url` text CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`phone` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=25837 DEFAULT CHARSET=utf8 |
Das problem das ich habe ist, dass MySQL passenden unicode-Zeichen mit ascii-Versionen. Zum Beispiel, wenn ich Suche für ein Wort enthält ein 'é', es wird mit dem gleichen Wort, das ein 'e' statt, und Umgekehrt:
mysql> SET NAMES utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT id, name FROM `organizations` WHERE `name` = 'Universite de Montreal';
+-------+-------------------------+
| id | name |
+-------+-------------------------+
| 16973 | Université de Montreal |
+-------+-------------------------+
1 row in set (0.01 sec)
Bekomme ich diese Ergebnisse sowohl von PHP und die Kommandozeile Konsole. Wie bekomme ich exakte übereinstimmungen aus meinem SELECT-Abfragen?
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Sie angegeben
name
Spalte alstext CHARACTER SET utf8 COLLATE utf8_unicode_ci
was sagt MySQL zu betrachten e und é als gleichwertig in passenden und Sortieren. Diese Sortierung undutf8_general_ci
beide machen eine Menge Dinge entspricht.http://www.collation-charts.org/ ist eine großartige Ressource, wenn Sie lernen, wie Sie die charts Lesen, das ist ziemlich einfach.
Wenn Sie möchten, e und é etc. um als unterschiedlich betrachtet werden, dann müssen Sie wählen Sie eine andere Sortierung. Finden Sie heraus, was Sortierungen werden auf dem server (vorausgesetzt, Sie beschränkt sich auf die UTF-8-Codierung):
Und wählen Sie mit Hilfe der Sortierung charts als Referenz.
Noch eine spezielle Sortierung ist
utf8_bin
im die es keine äquivalenzen, es ist eine binäre Entsprechung.Nur MySQL-Unicode-Sortierungen, ich bin mir dessen bewusst, dass die nicht sprachspezifisch sind
utf8_unicode_ci
,utf8_general_ci
undutf8_bin
. Sie sind ziemlich seltsam. Der eigentliche Zweck der Sortierung ist, um das computer-Spiel und die Art, wie eine person von irgendwo erwarten würde. Ungarische und türkische Wörterbücher haben Ihre Einträge geordnet nach unterschiedlichen Regeln. Angeben einer Sortierung ermöglicht die Sortierung und entsprechen gemäß den lokalen Vorschriften.Beispielsweise scheint es Dänen betrachten e und é gleichwertige, aber die Isländer nicht:
Einem anderen handy trick ist, füllen Sie eine ein-Spalten-Tabelle mit einer Reihe von Zeichen, die Sie interessiert sind (es ist einfacher, aus einem Skript) und dann MySQL kann Ihnen sagen, die äquivalenzen:
Natürlich, dies wird der Arbeit:
eine Sache, die Sie tun können, mit der Sie Ihre query-string Dekodieren...
es funktionierte für mich. 🙂
Den Sie gesetzt haben, Sortierung
utf8_unicode_ci
das entspricht akzentuiert lateinischen Zeichen. Weitere Informationen finden Sie hier.COLLATE utf8_unicode_ci
- und dies ist der Grund, warum MySQL gibt Spiele wie in dem Beispiel, das er oder Sie NICHT will.Fand ich heraus, dass man das angeforderte Ergebnis mit REGEXP
Aber nicht helfen, wenn Sie versuchen, die Gruppe genau mit Namen.