Điều này là do lỗi 70767 trên LOCATE()
và 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;