Това се дължи на бъг 70767 на LOCATE()
и INSTR()
, което е потвърдено.
Въпреки че INSTR()
в документацията се посочва, че може да се използва за многобайтови низове, изглежда не работи, както забелязвате, с сортиране като utf8_general_ci
, което трябва да е без значение за малки и големи букви и акценти
Докладът за грешка посочва, че въпреки че MySQL прави това правилно, той го прави само когато броят на байтовете също е идентичен:
За да изопачите примера на отчетите, ако създадете следната таблица:
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");
след това изпълнете тази заявка, можете да видите същото демонстрирано поведение:
select needle
, haystack
, needle=haystack as `=`
, haystack LIKE CONCAT('%',needle,'%') as `like`
, instr(needle, haystack) as `instr`
from t;