Je gebruikt utf8mb4_unicode_ci
voor uw kolommen, dus de controle is niet hoofdlettergevoelig. Als u utf8mb4_bin
. gebruikt in plaats daarvan worden de emoji 🌮 en 🌶 correct geïdentificeerd als verschillende letters.
Met WEIGHT_STRING
u kunt de waarden ophalen die worden gebruikt voor het sorteren en vergelijken van de invoerreeks.
Als je schrijft:
SELECT
WEIGHT_STRING ('🌮' COLLATE 'utf8mb4_unicode_ci'),
WEIGHT_STRING ('🌶' COLLATE 'utf8mb4_unicode_ci')
Dan kun je zien dat beide 0xfffd
. zijn . In Unicode-tekensets
ze zeggen:
Als je schrijft:
SELECT
WEIGHT_STRING('🌮' COLLATE 'utf8mb4_bin'),
WEIGHT_STRING('🌶' COLLATE 'utf8mb4_bin')
U krijgt hun unicode-waarden 0x01f32e
en 0x01f336
in plaats daarvan.
Voor andere letters zoals Ä
, Á
en A
die gelijk zijn als je utf8mb4_unicode_ci
. gebruikt , het verschil is te zien in:
SELECT
WEIGHT_STRING ('Ä' COLLATE 'utf8mb4_unicode_ci'),
WEIGHT_STRING ('A' COLLATE 'utf8mb4_unicode_ci')
Die komen overeen met het gewicht 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
Volgens:Verschil tussen utf8mb4_unicode_ci en utf8mb4_unicode_520_ci collaties in MariaDB/MySQL?
de gewichten die worden gebruikt voor utf8mb4_unicode_ci
zijn gebaseerd op UCA 4.0.0
omdat de emoji daar niet voorkomt, is het toegewezen gewicht 0xfffd
Als je hoofdletterongevoelige vergelijkingen en sorteringen nodig hebt voor gewone letters samen met emoji, dan is dit probleem opgelost met utf8mb4_unicode_520_ci
:
SELECT
WEIGHT_STRING('🌮' COLLATE 'utf8mb4_unicode_520_ci'),
WEIGHT_STRING('🌶' COLLATE 'utf8mb4_unicode_520_ci')
er zullen ook verschillende gewichten zijn voor die emoji 0xfbc3f32e
en 0xfbc3f336
.