Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Akzentunempfindliche Suchabfrage in MySQL

Sie können die Sortierung zur Laufzeit in der SQL-Abfrage ändern,

...where title like '%torun%' collate utf8_general_ci

Beachten Sie jedoch, dass durch das spontane Ändern der Kollatierung zur Laufzeit auf die Möglichkeit verzichtet wird, dass mysql einen Index verwendet, sodass die Leistung bei großen Tabellen schrecklich sein kann.

Oder Sie können die Spalte in eine andere Spalte kopieren, z. B. searchable_title , aber ändern Sie die Sortierung darauf. Es ist tatsächlich üblich, diese Art von Dingen zu tun, bei denen Sie Daten kopieren, sie aber in einer etwas anderen Form haben, die für eine bestimmte Arbeitslast/einen bestimmten Zweck optimiert ist. Sie können Trigger verwenden, um die duplizierten Spalten synchron zu halten. Diese Methode kann gut funktionieren, wenn sie indiziert wird.

Hinweis - Stellen Sie sicher, dass Ihre Datenbank wirklich diese Zeichen und keine HTML-Entitäten enthält. Außerdem ist der Zeichensatz Ihrer Verbindung von Bedeutung. Das Obige geht davon aus, dass es beispielsweise über set auf utf8 eingestellt ist Namen wie set names utf8

Wenn nicht, brauchen Sie einen Introducer für den Literalwert

...where title like _utf8'%torun%' collate utf8_general_ci

und natürlich muss der Wert in den einfachen Anführungszeichen tatsächlich utf8-codiert sein, auch wenn der Rest der SQL-Abfrage dies nicht ist.