Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

java.sql.SQLException:Nilai string salah:'\xF0\x9F\x91\xBD\xF0\x9F...'

Apa yang Anda miliki adalah EXTRATERRESTRIAL ALIEN (U+1F47D) dan BROKEN HEART (U+1F494) yang tidak dalam bidang multibahasa dasar. Mereka bahkan tidak dapat direpresentasikan dalam java sebagai satu karakter, "👽💔".length() == 4 . Mereka jelas bukan karakter nol dan orang akan melihat kotak jika Anda tidak menggunakan font yang mendukungnya.

utf8 MySQL hanya mendukung bidang multibahasa dasar, dan Anda perlu menggunakan utf8mb4 sebagai 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 mengubah 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 perlu menggunakan utf8mb4 di mana pun. Encoding koneksi harus utf8mb4 , set karakter harus utf8mb4 dan pengumpulan harus utf8mb4 . Untuk java masih "utf-8" , tetapi MySQL membutuhkan perbedaan.

Saya tidak tahu driver apa yang Anda gunakan tetapi cara agnostik driver untuk mengatur rangkaian karakter koneksi adalah dengan mengirim kueri:

SET NAMES 'utf8mb4'

Tepat setelah membuat koneksi.

Lihat juga ini untuk Konektor/J :

14.14:Bagaimana saya bisa menggunakan UTF8 4-byte, utf8mb4 dengan Connector/J?

Untuk menggunakan UTF8 4-byte dengan Connector/J, konfigurasikan server MySQL dengan character_set_server=utf8mb4. Connector/J kemudian akan menggunakan pengaturan ituselama characterEncoding tidak telah diatur dalam connectionstring . Ini setara dengan deteksi otomatis set karakter.

Sesuaikan kolom dan database Anda juga:

var1 varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL

Sekali lagi, versi MySQL Anda harus relatif terbaru untuk dukungan utf8mb4.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. generate_series() setara di MySQL

  2. Mencegah serangan injeksi SQL dalam program Java

  3. HAProxy:Semua Sumber Daya Somenines

  4. Cara Menemukan Item Daftar pada Posisi Tertentu di MySQL

  5. Bagaimana Cara Membangun Kembali Budak MySQL yang Tidak Konsisten?