Dette skyldes fejl 70767 på LOCATE()
og INSTR()
, som er blevet bekræftet.
Selvom INSTR()
dokumentation angiver, at det kan bruges til multi-byte strenge, det ser ikke ud til at virke, som du bemærker, med sammenstillinger som utf8_general_ci
, som bør være ufølsom over for store og små bogstaver og accent
Fejlrapporten siger, at selvom MySQL gør dette korrekt, gør det det kun, når antallet af bytes er også identisk:
For at pervertere rapporteksemplet, hvis du opretter følgende tabel:
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");
kør derefter denne forespørgsel, du kan se den samme adfærd demonstreret:
select needle
, haystack
, needle=haystack as `=`
, haystack LIKE CONCAT('%',needle,'%') as `like`
, instr(needle, haystack) as `instr`
from t;