Detta beror på bugg 70767 på LOCATE()
och INSTR()
, som har verifierats.
Även om INSTR()
dokumentationen säger att det kan användas för flerbytesträngar, det verkar inte fungera, som du noterar, med sammanställningar som utf8_general_ci
, som ska vara okänslig för skiftläge och accent
Felrapporten säger att även om MySQL gör detta korrekt gör det det bara när antalet byte är också identisk:
För att förvränga rapportexemplet, om du skapar följande tabell:
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 sedan den här frågan, du kan se samma beteende visas:
select needle
, haystack
, needle=haystack as `=`
, haystack LIKE CONCAT('%',needle,'%') as `like`
, instr(needle, haystack) as `instr`
from t;