Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

INSTR(str,substr) não funciona quando str contém 'é' ou 'ë' e substr apenas 'e'


Isso se deve ao bug 70767 em LOCATE() e INSTR() , o que foi verificado.

Embora o INSTR() a documentação afirma que ele pode ser usado para strings de vários bytes, não parece funcionar, como você observa, com collations como utf8_general_ci , que não deve diferenciar maiúsculas de minúsculas e acentos

O relatório de bug afirma que, embora o MySQL faça isso corretamente, ele só o faz quando o número de bytes também é idêntico:

Para perverter o exemplo de relatórios, se você criar a seguinte tabela:
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");

em seguida, execute esta consulta, você pode ver o mesmo comportamento demonstrado:
select needle
     , haystack
     , needle=haystack as `=`
     , haystack LIKE CONCAT('%',needle,'%') as `like`
     , instr(needle, haystack) as `instr`
  from t;

SQL Fiddle