Používáte utf8mb4_unicode_ci
pro vaše sloupce, takže kontrola nerozlišuje malá a velká písmena. Pokud používáte utf8mb4_bin
místo toho jsou emotikony 🌮 a 🌶 správně identifikovány jako různá písmena.
S WEIGHT_STRING
můžete získat hodnoty, které se používají pro třídění a porovnání pro vstupní řetězec.
Pokud napíšete:
SELECT
WEIGHT_STRING ('🌮' COLLATE 'utf8mb4_unicode_ci'),
WEIGHT_STRING ('🌶' COLLATE 'utf8mb4_unicode_ci')
Pak můžete vidět, že oba jsou 0xfffd
. V znakové sady Unicode
říkají:
Pokud napíšete:
SELECT
WEIGHT_STRING('🌮' COLLATE 'utf8mb4_bin'),
WEIGHT_STRING('🌶' COLLATE 'utf8mb4_bin')
Získáte jejich hodnoty unicode 0x01f32e
a 0x01f336
místo toho.
Pro ostatní písmena jako Ä
, Á
a A
které jsou stejné, pokud použijete utf8mb4_unicode_ci
, rozdíl je vidět v:
SELECT
WEIGHT_STRING ('Ä' COLLATE 'utf8mb4_unicode_ci'),
WEIGHT_STRING ('A' COLLATE 'utf8mb4_unicode_ci')
Ty se mapují na váhu 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
Podle :Rozdíl mezi kolacemi utf8mb4_unicode_ci a utf8mb4_unicode_520_ci v MariaDB/MySQL?
váhy používané pro utf8mb4_unicode_ci
jsou založeny na UCA 4.0.0
protože se tam emotikony nezobrazují, mapovaná váha je 0xfffd
Pokud potřebujete porovnávat a třídit běžná písmena bez ohledu na velikost písmen spolu s emotikony, pak je tento problém vyřešen pomocí utf8mb4_unicode_520_ci
:
SELECT
WEIGHT_STRING('🌮' COLLATE 'utf8mb4_unicode_520_ci'),
WEIGHT_STRING('🌶' COLLATE 'utf8mb4_unicode_520_ci')
budou také mít různé váhy pro tyto emotikony 0xfbc3f32e
a 0xfbc3f336
.