Dit komt door bug 70767 op LOCATE()
en INSTR()
, die is geverifieerd.
Hoewel de INSTR()
documentatie stelt dat het kan worden gebruikt voor strings van meerdere bytes, het lijkt niet te werken, zoals u opmerkt, met sorteringen zoals utf8_general_ci
, die ongevoelig moet zijn voor hoofdletters en accenten
Het bugrapport stelt dat hoewel MySQL dit correct doet, dit alleen gebeurt wanneer het aantal bytes is ook identiek:
Om het rapportvoorbeeld te verdraaien, als u de volgende tabel maakt:
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");
voer vervolgens deze query uit, u kunt hetzelfde gedrag zien gedemonstreerd:
select needle
, haystack
, needle=haystack as `=`
, haystack LIKE CONCAT('%',needle,'%') as `like`
, instr(needle, haystack) as `instr`
from t;