Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

INSTR(str,substr) tidak berfungsi ketika str berisi 'é' atau 'ë' dan substr hanya 'e'

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;

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. Bagaimana saya bisa melihat TRANSACTION_REPEATABLE_READ beraksi dengan JDBC / MySQL?

  2. Nama tabel Mysql tidak berfungsi dalam huruf besar

  3. MySQL SELECT SUM berdasarkan tabel lain

  4. Mengapa saya tidak dapat menggunakan density_rank untuk 'nilai peringkat' SQL?

  5. MySQL LIMIT pada pernyataan DELETE