Du använder utf8mb4_unicode_ci
för dina kolumner, så kontrollen är skiftlägesokänslig. Om du använder utf8mb4_bin
istället identifieras emojin 🌮 och 🌶 korrekt som olika bokstäver.
Med WEIGHT_STRING
du kan få de värden som används för sortering och jämförelse för inmatningssträngen.
Om du skriver:
SELECT
WEIGHT_STRING ('🌮' COLLATE 'utf8mb4_unicode_ci'),
WEIGHT_STRING ('🌶' COLLATE 'utf8mb4_unicode_ci')
Då kan du se att båda är 0xfffd
. I Unicode-teckenuppsättningar
de säger:
Om du skriver:
SELECT
WEIGHT_STRING('🌮' COLLATE 'utf8mb4_bin'),
WEIGHT_STRING('🌶' COLLATE 'utf8mb4_bin')
Du kommer att få deras unicode-värden 0x01f32e
och 0x01f336
istället.
För andra bokstäver som Ä
, Á
och A
som är lika om du använder utf8mb4_unicode_ci
, skillnaden kan ses i:
SELECT
WEIGHT_STRING ('Ä' COLLATE 'utf8mb4_unicode_ci'),
WEIGHT_STRING ('A' COLLATE 'utf8mb4_unicode_ci')
Dessa mappar till vikten 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
Enligt:Skillnaden mellan utf8mb4_unicode_ci och utf8mb4_unicode_520_ci-kollationer i MariaDB/MySQL?
vikterna som används för utf8mb4_unicode_ci
är baserade på UCA 4.0.0
eftersom emojin inte visas där är den mappade vikten 0xfffd
Om du behöver skiftlägesokänsliga jämförelser och sorteringar för vanliga bokstäver tillsammans med emoji så löses det här problemet med utf8mb4_unicode_520_ci
:
SELECT
WEIGHT_STRING('🌮' COLLATE 'utf8mb4_unicode_520_ci'),
WEIGHT_STRING('🌶' COLLATE 'utf8mb4_unicode_520_ci')
det kommer också att få olika vikter för dessa emoji 0xfbc3f32e
och 0xfbc3f336
.