Mysql
 sql >> Baza danych >  >> RDS >> Mysql

INSTR(str,substr) nie działa, gdy str zawiera 'é' lub 'ë', a substr tylko 'e'

Wynika to z błędu 70767 w LOCATE() i INSTR() , który został zweryfikowany.

Chociaż INSTR() dokumentacja stwierdza, że ​​można go używać do ciągów wielobajtowych, wydaje się, że nie działa, jak zauważyłeś, z sortowaniami takimi jak utf8_general_ci , który powinien być niewrażliwy na wielkość liter i akcent

Raport o błędzie stwierdza, że ​​chociaż MySQL robi to poprawnie, robi to tylko wtedy, gdy liczba bajtów jest również identyczny:

Aby wypaczyć przykład raportu, jeśli utworzysz następującą tabelę:

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

następnie uruchom to zapytanie, możesz zobaczyć to samo zachowanie:

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

SQL Fiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak stworzyć wielodostępną bazę danych ze współdzielonymi strukturami tabel?

  2. Pymysql Cursor.fetchall() / Fetchone() Zwraca Brak

  3. Zapisz zapytanie mysql do pliku Excela ze strony php

  4. Jak utworzyć wiele zapytań kolumnowych WHERE IN w konstruktorze zapytań Doctrine?

  5. MySQL :transakcja w ramach procedury składowanej