Mysql
 sql >> база данни >  >> RDS >> Mysql

INSTR(str,substr) не работи, когато str съдържа 'é' или 'ë' и substr само 'e'

Това се дължи на бъг 70767 на LOCATE() и INSTR() , което е потвърдено.

Въпреки че INSTR() в документацията се посочва, че може да се използва за многобайтови низове, изглежда не работи, както забелязвате, с сортиране като utf8_general_ci , което трябва да е без значение за малки и големи букви и акценти

Докладът за грешка посочва, че въпреки че MySQL прави това правилно, той го прави само когато броят на байтовете също е идентичен:

За да изопачите примера на отчетите, ако създадете следната таблица:

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

след това изпълнете тази заявка, можете да видите същото демонстрирано поведение:

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. програмиране на консултация докато и ако е вложено

  2. pdo безплатен резултат

  3. Как да покажа категория и подкатегория?

  4. SELECT SQL_CALC_FOUND_ROWS Заявка много бавно повече от 250 000 записа

  5. Избройте временни колони на таблица в mysql