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

INSTR(str,substr) funktioniert nicht, wenn str 'é' oder 'ë' enthält und substr nur 'e'

Dies liegt an Bug 70767 auf LOCATE() und INSTR() , die verifiziert wurde.

Obwohl der INSTR() Dokumentation besagt, dass es für Multi-Byte-Strings verwendet werden kann, es scheint, wie Sie bemerken, mit Sortierungen wie utf8_general_ci nicht zu funktionieren , die Groß- und Kleinschreibung unempfindlich sein sollte

Der Fehlerbericht besagt, dass MySQL dies zwar korrekt macht, aber nur, wenn die Anzahl der Bytes ist auch identisch:

Um das Berichtsbeispiel zu verfälschen, erstellen Sie die folgende Tabelle:

create table t ( needle varchar(10), haystack varchar(10)
                  ) COLLATE=utf8_general_ci;
insert into t values ("A", "a"), ("A", "XaX");
insert into t values ("A", "á"), ("A", "XáX");
insert into t values ("Á", "a"), ("Á", "XaX");
insert into t values ("Å", "á"), ("Å", "XáX");

Führen Sie dann diese Abfrage aus, Sie können das gleiche Verhalten demonstriert sehen:

select needle
     , haystack
     , needle=haystack as `=`
     , haystack LIKE CONCAT('%',needle,'%') as `like`
     , instr(needle, haystack) as `instr`
  from t;

SQL-Geige