Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Không thể chèn các ký hiệu không phải la tinh trong MySQL

Trong UTF-8, Упячка thực sự phải được biểu diễn dưới dạng \x423\x43F\x44F\x447\x43A\x430 . \xD0\xA3\xD0\xBF\xD1\x8F... ngụ ý rằng chúng được mã hóa không chính xác bằng ISO-8859-1.

Đây là đoạn mã thử nghiệm chứng minh điều này:

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);
}

Bản in nào

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

Vì vậy, vấn đề của bạn cần phải được giải quyết trước một bước. Vì bạn đang nói về một ứng dụng web Java và chuỗi này có thể là kết quả từ thông tin nhập của người dùng, bạn có chắc chắn rằng bạn đã quan tâm đến yêu cầu HTTP và mã hóa phản hồi không? Đầu tiên, trong JSP, bạn cần thêm những thứ sau vào đầu JSP:

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

Điều này không chỉ hiển thị trang trong UTF-8 mà còn đặt ngầm một HTTP Content-Type tiêu đề phản hồi hướng dẫn khách hàng rằng trang được hiển thị bằng UTF-8, để khách hàng biết rằng nó sẽ hiển thị bất kỳ nội dung nào và xử lý bất kỳ biểu mẫu nào bằng cách sử dụng cùng một mã hóa.

Bây giờ, phần yêu cầu HTTP, đối với các yêu cầu GET, bạn cần phải cấu hình trình điều khiển servlet được đề cập. Ví dụ:trong Tomcat, đây là vấn đề đặt URIEncoding thuộc tính của trình kết nối HTTP trong /conf/server.xml cho phù hợp. Đối với các yêu cầu POST, điều này phải được thực hiện bởi máy khách (trình duyệt web) đủ thông minh để sử dụng mã hóa phản hồi như được chỉ định trong JSP. Nếu không, thì bạn sẽ cần đưa vào Filter kiểm tra bộ mã hóa yêu cầu.

Để biết thêm thông tin cơ bản, bạn có thể tìm thấy bài viết này hữu ích.

Ngoài tất cả những điều này, MySQL còn có một vấn đề khác với các ký tự Unicode. Nó chỉ hỗ trợ các ký tự UTF-8 tối đa 3 byte , không phải 4 byte. Nói cách khác, chỉ có dải BMP gồm 65535 ký tự được hỗ trợ, bên ngoài thì không. Ví dụ như PostgreSQL hỗ trợ nó đầy đủ. Điều này có thể không ảnh hưởng đến ứng dụng web của bạn, nhưng đây chắc chắn là điều cần lưu ý.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các hàng trong bảng HTML có thể nhấp được ĐĂNG lên cửa sổ bật lên PHP

  2. MySql - Sự cố khi tạo chế độ xem

  3. Làm cách nào để sử dụng lệnh nguồn mysql với biến mysql?

  4. Chọn tất cả trừ một trường?

  5. Đọc các giá trị hộp kiểm bằng cách sử dụng chức năng mã hóa