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 .