Mysql
 sql >> Database >  >> RDS >> Mysql

INSTR(str,substr) non funziona quando str contiene 'é' o 'ë' e substr solo 'e'

Ciò è dovuto a bug 70767 su LOCATE() e INSTR() , che è stato verificato.

Sebbene INSTR() la documentazione afferma che può essere utilizzato per stringhe multi-byte, non sembra funzionare, come si nota, con regole di confronto come utf8_general_ci , che dovrebbe non fare distinzione tra maiuscole e minuscole e accenti

La segnalazione di bug afferma che sebbene MySQL lo faccia correttamente, lo fa solo quando il numero di byte è anche identico:

Per pervertire l'esempio dei rapporti, se crei la seguente tabella:

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");

quindi esegui questa query, puoi vedere lo stesso comportamento dimostrato:

select needle
     , haystack
     , needle=haystack as `=`
     , haystack LIKE CONCAT('%',needle,'%') as `like`
     , instr(needle, haystack) as `instr`
  from t;

SQL Fiddle