Използвате 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 .