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

Tại sao các chữ cái tiếng Ả Rập không được chèn vào cơ sở dữ liệu?

Điều này được gọi là Mojibake . Đây không phải là vấn đề mã hóa DB mà là vấn đề mã hóa HTTP. Đặt mã hóa ký tự yêu cầu POST như bạn đã làm thực sự là giải pháp thích hợp.

Dấu chấm hỏi xảy ra khi cả hai các mặt của kết nối được nhận biết mã hóa của riêng họ. Các ký tự đã gửi / truy xuất không nằm trong bảng mã của một mặt sẽ được thay thế bằng dấu chấm hỏi. Các ký tự Ả Rập không xuất hiện trong ISO-8859-1 và do đó chúng được thay thế bằng dấu chấm hỏi. Đó là sự khác biệt với Mojibake, theo đó các ký tự được gửi đi mà không cần kiểm tra xem liệu mã hóa được phía bên kia sử dụng có thực sự hỗ trợ ký tự hay không. Bạn sẽ nhận được các ký tự được mã hóa không chính xác, các ký tự này tự thể hiện dưới dạng một chuỗi ký tự khó hiểu.

Trong trường hợp cụ thể này, trình điều khiển JDBC tự nhận biết rằng nó đang sử dụng ISO-8859-1 theo mặc định để truyền các ký tự tới DB, trong khi các ký tự được truy xuất nằm trong UTF-8 (trình điều khiển MySQL JDBC không nhìn vào DB mã hóa bảng, mặc dù nó đã được đặt đúng thành UTF-8 trong trường hợp của bạn). Bạn cần thông báo rõ ràng cho trình điều khiển JDBC sử dụng UTF-8 để giải mã các ký tự trước khi truyền dữ liệu đến DB. Điều này phải được thực hiện dưới dạng thuộc tính kết nối JDBC được định nghĩa là tham số chuỗi truy vấn trong URL JDBC như sau:

jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8

Nếu bạn đang sử dụng nguồn dữ liệu do vùng chứa quản lý, thì chỉ cần chỉ định các thuộc tính đó một cách riêng biệt giống như cách bạn đã làm cho tên người dùng và mật khẩu

useUnicode=yes
characterEncoding=UTF-8

Xem thêm:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy xuất dữ liệu với cấu trúc phân cấp trong MySQL

  2. MySQL có thể khôi phục đáng tin cậy các bản sao lưu có chứa các khung nhìn hay không?

  3. Cách cấu hình MySQL để phân biệt chữ hoa chữ thường

  4. Nhóm Django theo ngày tháng và giá trị SUM

  5. MySQL có khả năng chống lại cuộc tấn công SQL injection tốt hơn PostgreSQL (theo Perl / DBI) không?