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

Tidak dapat menyisipkan simbol non latin di MySQL

Di UTF-8, Упячка sebenarnya harus direpresentasikan sebagai \x423\x43F\x44F\x447\x43A\x430 . \xD0\xA3\xD0\xBF\xD1\x8F... menyiratkan bahwa mereka salah dikodekan menggunakan ISO-8859-1.

Berikut cuplikan pengujian yang membuktikan hal ini:

String s = new String("Упячка".getBytes("UTF-8"), "ISO-8859-1"); // First decode with UTF-8, then (incorrectly) encode with ISO-8859-1.
for (char c : s.toCharArray()) {
    System.out.printf("\\x%X", (int) c);
}

Yang dicetak

\xD0\xA3\xD0\xBF\xD1\x8F\xD1\x87\xD0\xBA\xD0\xB0

Jadi masalah Anda perlu diselesaikan satu langkah sebelumnya. Karena Anda berbicara tentang aplikasi web Java dan string ini kemungkinan dihasilkan dari input pengguna, apakah Anda yakin telah memperhatikan permintaan HTTP dan penyandian respons? Pertama, di JSP, Anda perlu menambahkan berikut ini ke atas JSP:

<%@ page pageEncoding="UTF-8" %>

Ini tidak hanya merender halaman dalam UTF-8, tetapi juga secara implisit menetapkan HTTP Content-Type header respons yang menginstruksikan klien bahwa halaman dirender menggunakan UTF-8, sehingga klien tahu bahwa itu harus menampilkan konten apa pun dan memproses formulir apa pun menggunakan penyandian yang sama.

Sekarang, bagian permintaan HTTP, untuk permintaan GET Anda perlu mengonfigurasi servletcontainer yang dimaksud. Di Tomcat misalnya, ini adalah masalah pengaturan URIEncoding atribut konektor HTTP di /conf/server.xml demikian. Untuk permintaan POST, ini harus ditangani oleh klien (peramban web) yang cukup pintar untuk menggunakan penyandian respons seperti yang ditentukan dalam JSP. Jika tidak, Anda harus membawa Filter yang memeriksa dan set pengkodean permintaan.

Untuk informasi latar belakang lebih lanjut, Anda dapat menemukan artikel ini berguna.

Terlepas dari semua ini, MySQL memiliki masalah lain dengan karakter Unicode. Ini hanya mendukung karakter UTF-8 hingga 3 byte , bukan 4 byte. Dengan kata lain, hanya kisaran BMP 65535 karakter yang didukung, di luar tidak. PostgreSQL misalnya mendukungnya sepenuhnya. Ini mungkin tidak mengganggu aplikasi web Anda, tetapi ini pasti sesuatu yang perlu diingat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mengapa jumlah () kueri mengembalikan hasil dengan lebih banyak poin desimal?

  2. Terjebak dalam kesalahan 2 dengan mysql menggunakan XAMPP

  3. AngularJS | Cara Mengirim Data Json ke database di Codeigniter

  4. mysql:cara menjumlahkan sebagian yang dikalikan

  5. Kegagalan Basis Data untuk Situs WordPress