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 0x01f32e
và 0x01f336
thay vào đó.
Đối với các chữ cái khác như Ä
, Á
và 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 đó 0xfbc3f32e
và 0xfbc3f336
.