Důvodem je chyba 70767 na LOCATE()
a INSTR()
, který byl ověřen.
Ačkoli INSTR()
dokumentace uvádí, že jej lze použít pro vícebajtové řetězce, zdá se, že nefunguje, jak si všimnete, s porovnáváním jako utf8_general_ci
, který neměl by rozlišovat malá a velká písmena
Zpráva o chybě uvádí, že ačkoli to MySQL dělá správně, dělá to pouze tehdy, když počet bajtů je také identický:
Chcete-li zvrátit příklad sestav, pokud vytvoříte následující tabulku:
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");
poté spusťte tento dotaz, uvidíte demonstrované stejné chování:
select needle
, haystack
, needle=haystack as `=`
, haystack LIKE CONCAT('%',needle,'%') as `like`
, instr(needle, haystack) as `instr`
from t;