Điều gì đã xảy ra:
- bạn có dữ liệu được mã hóa utf8 (tốt)
-
ĐẶT TÊN 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 Ả Rập (Kurdish / Farsi / etc), vì vậy dấu chấm hỏi đã thay thế chúng.
Cách chữa (cho INSERTs
trong tương lai ):
- dữ liệu được mã hóa utf8 (tốt)
-
mysqli_set_charset ('utf8')
(hoặc bất cứ thứ gì khách hàng của bạn cần để thiết lậpBỘ NHÂN VẬT
) - 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,
Phần thảo luận ở trên là về BỘ NHÂN VẬT
, 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.
Để kiểm tra lại xem dữ liệu có được lưu trữ đúng cách hay không, hãy thực hiện SELECT col, HEX (col) ...
.
هرچوون nên quay lại
D987E2808CD8B1DA86D988D988D986
Các ký tự tiếng Ả Rập
trong utf8 có hex là D8xx hoặc D9xx.
( utf8mb4
hoạt động tốt như utf8
; hoặc hoạt động cho tiếng Ả Rập.)
Tin xấu:Dữ liệu đã được chèn và biến thành '???' không thể phục hồi.