Używasz utf8mb4_unicode_ci
dla Twoich kolumn, więc sprawdzanie nie uwzględnia wielkości liter. Jeśli używasz utf8mb4_bin
zamiast tego emoji 🌮 i 🌶 są poprawnie identyfikowane jako różne litery.
Z WEIGHT_STRING
możesz uzyskać wartości używane do sortowania i porównywania ciągu wejściowego.
Jeśli piszesz:
SELECT
WEIGHT_STRING ('🌮' COLLATE 'utf8mb4_unicode_ci'),
WEIGHT_STRING ('🌶' COLLATE 'utf8mb4_unicode_ci')
Wtedy możesz zobaczyć, że oba są 0xfffd
. W zestawach znaków Unicode
mówią:
Jeśli piszesz:
SELECT
WEIGHT_STRING('🌮' COLLATE 'utf8mb4_bin'),
WEIGHT_STRING('🌶' COLLATE 'utf8mb4_bin')
Otrzymasz ich wartości unicode 0x01f32e
i 0x01f336
zamiast tego.
W przypadku innych liter, takich jak Ä
, Á
i A
które są równe, jeśli używasz utf8mb4_unicode_ci
, różnicę widać w:
SELECT
WEIGHT_STRING ('Ä' COLLATE 'utf8mb4_unicode_ci'),
WEIGHT_STRING ('A' COLLATE 'utf8mb4_unicode_ci')
Te mapowane do wagi 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
Według:Różnica między zestawieniami utf8mb4_unicode_ci i utf8mb4_unicode_520_ci w MariaDB/MySQL?
wagi używane dla utf8mb4_unicode_ci
są oparte na UCA 4.0.0
ponieważ emotikony nie pojawiają się tam, zmapowana waga to 0xfffd
Jeśli potrzebujesz porównywania i sortowania zwykłych liter wraz z emotikonami bez uwzględniania wielkości liter, ten problem można rozwiązać za pomocą utf8mb4_unicode_520_ci
:
SELECT
WEIGHT_STRING('🌮' COLLATE 'utf8mb4_unicode_520_ci'),
WEIGHT_STRING('🌶' COLLATE 'utf8mb4_unicode_520_ci')
pojawią się również różne wagi dla tych emotikonów 0xfbc3f32e
i 0xfbc3f336
.