sql >> Base de Datos >  >> RDS >> Mysql

INSTR(str,substr) no funciona cuando str contiene 'é' o 'ë' y substr solo 'e'

Esto se debe al error 70767 en LOCATE() y INSTR() , que ha sido verificado.

Aunque el INSTR() la documentación indica que se puede usar para cadenas de varios bytes, no parece funcionar, como observa, con intercalaciones como utf8_general_ci , que debe ser insensible a mayúsculas y minúsculas

El informe de errores indica que, aunque MySQL hace esto correctamente, solo lo hace cuando la cantidad de bytes también es idéntico:

Para pervertir el ejemplo de informes, si crea la siguiente tabla:

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

luego ejecute esta consulta, puede ver el mismo comportamiento demostrado:

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

SQL Fiddle