Използвате utf8mb4_unicode_ci
за вашите колони, така че проверката не е чувствителна към главни букви. Ако използвате utf8mb4_bin
вместо това емоджи 🌮 и 🌶 са правилно идентифицирани като различни букви.
С WEIGHT_STRING
можете да получите стойностите, които се използват за сортиране и сравнение за входния низ.
Ако пишете:
SELECT
WEIGHT_STRING ('🌮' COLLATE 'utf8mb4_unicode_ci'),
WEIGHT_STRING ('🌶' COLLATE 'utf8mb4_unicode_ci')
Тогава можете да видите, че и двете са 0xfffd
. В Набори от символи в Unicode
те казват:
Ако пишете:
SELECT
WEIGHT_STRING('🌮' COLLATE 'utf8mb4_bin'),
WEIGHT_STRING('🌶' COLLATE 'utf8mb4_bin')
Ще получите техните Unicode стойности 0x01f32e
и 0x01f336
вместо това.
За други букви като Ä
, Á
и A
които са равни, ако използвате utf8mb4_unicode_ci
, разликата може да се види в:
SELECT
WEIGHT_STRING ('Ä' COLLATE 'utf8mb4_unicode_ci'),
WEIGHT_STRING ('A' COLLATE 'utf8mb4_unicode_ci')
Те се преобразуват в теглото 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
Според:Разликата между utf8mb4_unicode_ci и utf8mb4_unicode_520_ci в MariaDB/MySQL?
теглата, използвани за utf8mb4_unicode_ci
са базирани на UCA 4.0.0
тъй като емоджитата не се показват там, картографираното тегло е 0xfffd
Ако имате нужда от сравнения и сортиране без значение на главни букви за обикновени букви заедно с емоджи, тогава този проблем се решава с помощта на utf8mb4_unicode_520_ci
:
SELECT
WEIGHT_STRING('🌮' COLLATE 'utf8mb4_unicode_520_ci'),
WEIGHT_STRING('🌶' COLLATE 'utf8mb4_unicode_520_ci')
ще има и различни тегла за тези емоджи 0xfbc3f32e
и 0xfbc3f336
.