Apa yang Anda miliki EXTRATERRESTRIAL ALIEN (U+1F47D)
dan BROKEN HEART (U+1F494)
yang tidak berada dalam bidang multibahasa dasar. Mereka bahkan tidak dapat direpresentasikan di java sebagai satu karakter "π½π".length() == 4
,. Mereka jelas bukan karakter nol dan orang akan melihat kotak jika Anda tidak menggunakan font yang mendukungnya.
MySQL utf8
hanya mendukung pesawat dasar multibahasa, dan Anda perlu menggunakan utf8mb4
gantinya :
Untuk karakter tambahan, utf8 tidak dapat menyimpan karakter sama sekali, sedangkan utf8mb4 membutuhkan empat byte untuk menyimpannya. Karena utf8 tidak dapat menyimpan karakter sama sekali, Anda tidak memiliki karakter tambahan di kolom utf8 dan Anda tidak perlu khawatir tentang mengonversi karakter atau kehilangan data saat memutakhirkan data utf8 dari versi MySQL yang lebih lama.
Jadi untuk mendukung karakter ini, MySQL Anda harus 5,5+ dan Anda harus menggunakannya di utf8mb4
mana saja. Pengkodean koneksi perlu dilakukan utf8mb4
, kumpulan karakter perlu utf8mb4
dan pengumpulan harus dilakukan utf8mb4
. Untuk java masih saja"utf-8"
, tapi MySQL membutuhkan perbedaan.
Saya tidak tahu driver apa yang Anda gunakan tetapi cara driver agnostik untuk mengatur charset koneksi adalah dengan mengirim kueri:
SET NAMES 'utf8mb4'
Tepat setelah membuat koneksi.
Lihat juga ini untuk Connector / J :
14.14: Bagaimana cara menggunakan UTF8 4-byte, utf8mb4 dengan Connector / J?
Untuk menggunakan UTF8 4-byte dengan Connector / J mengkonfigurasi server MySQL dengan character_set_server = utf8mb4. Connector / J kemudian akan menggunakan pengaturan itu
selama characterEncoding belum diatur dalam string koneksi . Ini sama dengan deteksi otomatis himpunan karakter.
Sesuaikan juga kolom dan database Anda:
var1 varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
Sekali lagi, versi MySQL Anda harus relatif mutakhir untuk dukungan utf8mb4.