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

Làm cách nào để tôi có thể tìm kiếm bằng biểu tượng cảm xúc trong MySQL bằng utf8mb4?

Bạn sử dụng utf8mb4_unicode_ci cho các cột của bạn, vì vậy séc không phân biệt chữ hoa chữ thường. Nếu bạn sử dụng utf8mb4_bin thay vào đó, biểu tượng cảm xúc 🌮 và 🌶 được xác định chính xác là các chữ cái khác nhau.

Với WEIGHT_STRING bạn có thể lấy các giá trị được sử dụng để sắp xếp và so sánh cho chuỗi đầu vào.

Nếu bạn viết:

SELECT
  WEIGHT_STRING ('🌮' COLLATE 'utf8mb4_unicode_ci'),
  WEIGHT_STRING ('🌶' COLLATE 'utf8mb4_unicode_ci')

Sau đó, bạn có thể thấy rằng cả hai đều là 0xfffd . Trong Bộ ký tự Unicode họ nói:

Nếu bạn viết:

SELECT 
  WEIGHT_STRING('🌮' COLLATE 'utf8mb4_bin'),
  WEIGHT_STRING('🌶' COLLATE 'utf8mb4_bin')

Bạn sẽ nhận được các giá trị unicode của chúng 0x01f32e0x01f336 thay vào đó.

Đối với các chữ cái khác như Ä , ÁA điều đó tương đương nếu bạn sử dụng utf8mb4_unicode_ci , sự khác biệt có thể được nhìn thấy trong:

SELECT
  WEIGHT_STRING ('Ä' COLLATE 'utf8mb4_unicode_ci'),
  WEIGHT_STRING ('A' COLLATE 'utf8mb4_unicode_ci')

Những ánh xạ tới trọng số 0x0E33

Ä: 00C4  ; [.0E33.0020.0008.0041][.0000.0047.0002.0308] # LATIN CAPITAL LETTER A WITH DIAERESIS; QQCM
A: 0041  ; [.0E33.0020.0008.0041] # LATIN CAPITAL LETTER A

Theo: Sự khác biệt giữa các đối chiếu utf8mb4_unicode_ci và utf8mb4_unicode_520_ci trong MariaDB / MySQL? trọng số được sử dụng cho utf8mb4_unicode_ci dựa trên UCA 4.0.0 vì biểu tượng cảm xúc không xuất hiện ở đó, trọng lượng được ánh xạ là 0xfffd

Nếu bạn cần so sánh và sắp xếp không phân biệt chữ hoa chữ thường cùng với biểu tượng cảm xúc thì vấn đề này sẽ được giải quyết bằng cách sử dụng utf8mb4_unicode_520_ci :

SELECT
  WEIGHT_STRING('🌮' COLLATE 'utf8mb4_unicode_520_ci'),
  WEIGHT_STRING('🌶' COLLATE 'utf8mb4_unicode_520_ci')

cũng sẽ nhận được các trọng số khác nhau cho các biểu tượng cảm xúc đó 0xfbc3f32e0xfbc3f336 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuỗi orX trong trình tạo truy vấn Doctrine2

  2. Loại cột nào nên được sử dụng để lưu trữ dữ liệu được tuần tự hóa trong db mysql?

  3. máy chủ php ERR_CONNECTION_REFUSED

  4. Kết nối trái không trả về tất cả các hàng

  5. truy cập đồng thời vào cơ sở dữ liệu MySQL bằng thủ tục được lưu trữ