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

Cách MySQL hoạt động không phân biệt chữ hoa chữ thường và không phân biệt dấu trong UTF-8

Bạn đã cố gắng sử dụng đối chiếu không nhạy trọng âm để tìm kiếm và đặt hàng của mình.

http://dev.mysql.com/doc /refman/5.0/en/charset-collation-implementations.html

Vấn đề là, NAME của bạn cột dường như được lưu trữ trong bộ ký tự latin1 (8-bit). Đó là lý do tại sao mySQL đang càu nhàu với bạn như thế này:

  COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'latin1'

Bạn có thể nhận được kết quả mong muốn nếu bạn cố gắng

 WHERE CONVERT(p.NAME USING utf8) LIKE _utf8 '%jose%' COLLATE utf8_general_ci;

Nhưng, hãy cẩn thận!

Khi bạn sử dụng bất kỳ loại hàm nào (trong ví dụ này là CHUYỂN ĐỔI) trên cột trong câu lệnh WHERE, bạn đã đánh bại nỗ lực của MySQL để tối ưu hóa tìm kiếm của bạn với các chỉ mục. Nếu dự án này sẽ trở nên lớn (nghĩa là nếu bạn có nhiều hàng trong bảng của mình), bạn cần lưu trữ dữ liệu của mình ở định dạng utf8, không phải latin1. (Có thể bạn đã biết rằng LIKE '%whatever%' của bạn cụm từ tìm kiếm cũng đánh bại việc lập chỉ mục của MySQL.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tuyên bố chuẩn bị với ON DUPLICATE KEY

  2. Có thể sử dụng Crosstab / Pivot Query trong MySQL không?

  3. MySQL kết xuất vào tệp văn bản CSV với tên cột ở trên cùng?

  4. Chèn hàng mới với dữ liệu được tính toán từ các hàng khác

  5. MySQL:Điền vào một bảng trong một Thủ tục được Lưu trữ một cách hiệu quả