Du bruger utf8mb4_unicode_ci
for dine kolonner, så afkrydsningsfeltet er ufølsomt for store og små bogstaver. Hvis du bruger utf8mb4_bin
i stedet er emojin 🌮 og 🌶 korrekt identificeret som forskellige bogstaver.
Med WEIGHT_STRING
du kan få de værdier, der bruges til sortering og sammenligning for inputstrengen.
Hvis du skriver:
SELECT
WEIGHT_STRING ('🌮' COLLATE 'utf8mb4_unicode_ci'),
WEIGHT_STRING ('🌶' COLLATE 'utf8mb4_unicode_ci')
Så kan du se, at begge er 0xfffd
. I Unicode-tegnsæt
de siger:
Hvis du skriver:
SELECT
WEIGHT_STRING('🌮' COLLATE 'utf8mb4_bin'),
WEIGHT_STRING('🌶' COLLATE 'utf8mb4_bin')
Du får deres unicode-værdier 0x01f32e
og 0x01f336
i stedet.
For andre bogstaver som Ä
, Á
og A
der er ens, hvis du bruger utf8mb4_unicode_ci
, kan forskellen ses i:
SELECT
WEIGHT_STRING ('Ä' COLLATE 'utf8mb4_unicode_ci'),
WEIGHT_STRING ('A' COLLATE 'utf8mb4_unicode_ci')
Disse kort til vægten 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
Ifølge:Forskel mellem utf8mb4_unicode_ci og utf8mb4_unicode_520_ci-kollationer i MariaDB/MySQL?
vægtene brugt til utf8mb4_unicode_ci
er baseret på UCA 4.0.0
fordi emoji'en ikke vises derinde, er den tilknyttede vægt 0xfffd
Hvis du har brug for ufølsomme sammenligninger og sorteringer for almindelige bogstaver sammen med emoji, er dette problem løst ved hjælp af utf8mb4_unicode_520_ci
:
SELECT
WEIGHT_STRING('🌮' COLLATE 'utf8mb4_unicode_520_ci'),
WEIGHT_STRING('🌶' COLLATE 'utf8mb4_unicode_520_ci')
der vil også få forskellige vægte for disse emoji 0xfbc3f32e
og 0xfbc3f336
.