Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

INSTR (str, substr) không hoạt động khi str chứa 'é' hoặc 'ë' và chỉ substr 'e'

Điều này là do lỗi 70767 trên LOCATE()INSTR() , đã được xác minh.

Mặc dù INSTR() tài liệu nói rằng nó có thể được sử dụng cho các chuỗi nhiều byte, nó dường như không hoạt động, như bạn lưu ý, với các đối chiếu như utf8_general_ci , phải không phân biệt chữ hoa và chữ thường

Báo cáo lỗi nói rằng mặc dù MySQL thực hiện điều này một cách chính xác nhưng nó chỉ làm như vậy khi số lượng byte cũng giống hệt nhau:

Để thay đổi ví dụ báo cáo, nếu bạn tạo bảng sau:

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

sau đó chạy truy vấn này, bạn có thể thấy cùng một hành vi được thể hiện:

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. Hibernate ManyToMany lựa chọn

  2. Hàng đợi PHP + MySQL

  3. Không thể chạy bất kỳ thứ gì từ các tiện ích mysql:Không có mô-đun nào có tên mysql.utilities.common.tools

  4. MySQL Có giới hạn cho InnerJoin không?

  5. SequelizeJS - hasMany to hasMany trên cùng một bảng với một bảng tham gia