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

Các ký tự không phải tiếng Anh được lưu trữ, có '?????' - Vấn đề về Bộ ký tự MySQL

Tin xấu. Nhưng trước tiên, hãy kiểm tra kỹ:

SELECT col, HEX(col)...

để xem những gì có trong bảng. Nếu hệ lục phân hiển thị 3F , sau đó dữ liệu đã biến mất. Được lưu trữ chính xác, dal ký tự phải là hex D8AF; hah là hex D8AD .

Điều gì đã xảy ra:

  • bạn có dữ liệu được mã hóa utf8 (tốt)
  • SET NAMES latin1 đã có hiệu lực (mặc định, nhưng sai)
  • cột đã được khai báo CHARACTER SET latin1 (mặc định, nhưng sai)

Khi bạn INSERTed dữ liệu, nó đã được chuyển đổi thành latin1, không có giá trị cho các ký tự tiếng Farsi, vì vậy dấu chấm hỏi đã thay thế chúng.

Cách chữa (cho `INSERTs trong tương lai):

  • Mã hóa ứng dụng của bạn bằng giao diện mysqli_ * thay vì giao diện mysql_ * không dùng nữa.
  • dữ liệu được mã hóa utf8 (tốt)
  • mysqli_set_charset ('utf8')
  • kiểm tra xem (các) cột và / hoặc mặc định của bảng có phải là CHARACTER SET utf8 không
  • Nếu bạn đang hiển thị trên một trang web, <meta...utf8> phải ở gần đầu.

Phần thảo luận ở trên là về CHARACTER SET , bảng mã của các ký tự. Bây giờ để biết mẹo về COLLATION , được sử dụng để so sánh và sắp xếp.

Nếu bạn muốn chúng được đối xử bình đẳng:'بِسْمِ' ='بسم', thì hãy sử dụng utf8_unicode_ci (thay vì utf8_general_ci) cho COLLATION .




  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ách tốt nhất để loại bỏ giá trị khỏi trường SET?

  2. Tại sao MySQL cho phép nhóm theo truy vấn KHÔNG có hàm tổng hợp?

  3. Di chuyển Laravel:khóa duy nhất quá dài, ngay cả khi được chỉ định

  4. Thư viện Php Mô hình Tập hợp lồng nhau

  5. PHP và MySQL ngày nhỏ nhất và lớn nhất có thể