Ini karena bug 70767 di LOCATE()
dan INSTR()
, yang telah diverifikasi.
Meskipun INSTR()
dokumentasi menyatakan bahwa itu dapat digunakan untuk string multi-byte, sepertinya tidak berfungsi, seperti yang Anda perhatikan, dengan susunan seperti utf8_general_ci
, yang harus tidak peka huruf besar-kecil dan aksen
Laporan bug menyatakan bahwa meskipun MySQL melakukan ini dengan benar, ia hanya melakukannya ketika jumlah byte juga identik:
Untuk memutarbalikkan contoh laporan, jika Anda membuat tabel berikut:
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");
lalu jalankan kueri ini, Anda dapat melihat perilaku yang sama ditunjukkan:
select needle
, haystack
, needle=haystack as `=`
, haystack LIKE CONCAT('%',needle,'%') as `like`
, instr(needle, haystack) as `instr`
from t;