Anda menggunakan utf8mb4_unicode_ci
untuk kolom Anda, jadi centang tidak peka huruf besar-kecil. Jika Anda menggunakan utf8mb4_bin
sebagai gantinya, emoji dan diidentifikasi dengan benar sebagai huruf yang berbeda.
Dengan WEIGHT_STRING
Anda bisa mendapatkan nilai yang digunakan untuk menyortir dan membandingkan string input.
Jika Anda menulis:
SELECT
WEIGHT_STRING ('🌮' COLLATE 'utf8mb4_unicode_ci'),
WEIGHT_STRING ('🌶' COLLATE 'utf8mb4_unicode_ci')
Kemudian Anda dapat melihat bahwa keduanya 0xfffd
. Di Kumpulan Karakter Unicode
mereka berkata:
Jika Anda menulis:
SELECT
WEIGHT_STRING('🌮' COLLATE 'utf8mb4_bin'),
WEIGHT_STRING('🌶' COLLATE 'utf8mb4_bin')
Anda akan mendapatkan nilai unicode 0x01f32e
dan 0x01f336
sebagai gantinya.
Untuk huruf lain seperti Ä
, Á
dan A
yang sama jika Anda menggunakan utf8mb4_unicode_ci
, perbedaannya bisa dilihat di:
SELECT
WEIGHT_STRING ('Ä' COLLATE 'utf8mb4_unicode_ci'),
WEIGHT_STRING ('A' COLLATE 'utf8mb4_unicode_ci')
Mereka memetakan ke berat 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
Menurut :Perbedaan antara utf8mb4_unicode_ci dan utf8mb4_unicode_520_ci susunan di MariaDB/MySQL?
bobot yang digunakan untuk utf8mb4_unicode_ci
didasarkan pada UCA 4.0.0
karena emoji tidak muncul di sana, bobot yang dipetakan adalah 0xfffd
Jika Anda memerlukan perbandingan dan pengurutan yang tidak peka huruf besar-kecil untuk huruf biasa bersama dengan emoji, maka masalah ini diselesaikan menggunakan utf8mb4_unicode_520_ci
:
SELECT
WEIGHT_STRING('🌮' COLLATE 'utf8mb4_unicode_520_ci'),
WEIGHT_STRING('🌶' COLLATE 'utf8mb4_unicode_520_ci')
ada juga akan mendapatkan bobot yang berbeda untuk emoji itu 0xfbc3f32e
dan 0xfbc3f336
.