2010-04-22 36 views
15

Tại sao MySQL không lưu trữ ký tự unicode ? Vâng, đó là một chữ tượng hình hiếm hoi, bạn sẽ không thấy nó trong trình duyệt.
UTF16 là U+2B5EEMySQL không muốn lưu trữ ký tự unicode

Warning: #1366 Incorrect string value: '\xF0\xAB\x97\xAE' for column 'ch' at row 1 

Có thể lưu trữ nhân vật này trong MySQL?

+0

bạn có thể muốn kiểm tra http://bugs.mysql.com/bug.php?id=14052 nó dường như có liên quan. – xycf7

Trả lời

14

MySQL chỉ hỗ trợ các ký tự từ mặt phẳng đa ngôn ngữ cơ bản (0x0000 - 0xFFFF).

Nhân vật của bạn sẽ hết nếu máy bay này.

Hãy thử lưu trữ một từ đồng nghĩa thay :)

Cập nhật:

MySQL 5.5.3 và trên (mà chưa đi GA chưa) không hỗ trợ các ký bổ sung nếu bạn sử dụng UTF8MB4 encoding.

+0

Đã gặp rắc rối với utf8 trong MySQL trong nhiều ngày. Bây giờ tôi biết tại sao! Cảm ơn! –

2

Đầu tiên: tuyên bố của bạn

UTF16 là U + 2B5EE

là hơi sai. U+2B5EE là ký hiệu cho mã Unicode codepoint, chỉ là một số nguyên- một mã trừu tượng- trong khi UTF16 là một bảng mã charset (một trong các mã hóa Unicode có thể, cũng như UTF-8).

Bây giờ, giả định rằng bạn có nghĩa là điểm mã, U+2B5EE nằm ngoài BMP (mã hóa unicode 64K đầu tiên), và có vẻ như mysql có little or no support for them. Vì vậy, tôi nghi ngờ bạn đang ra khỏi may mắn.

1

Vì câu hỏi này đã được đăng, MySQL 5.5.3 đã được phát hành có hỗ trợ mã hóa utf8mb4 cung cấp hỗ trợ Unicode đầy đủ. Chuyển sang bộ ký tự này thay vì utf8 sẽ khắc phục được sự cố của bạn.

Gần đây, tôi đã viết a detailed guide on how to switch from MySQL’s utf8 to utf8mb4. Nếu bạn làm theo các bước ở đó, mọi thứ sẽ hoạt động chính xác. Dưới đây là liên kết trực tiếp với từng bước cá nhân trong quá trình này:

Tôi nghi ngờ rằng vấn đề của bạn có thể được giải quyết bằng cách làm theo bước 5. Hy vọng điều này sẽ giúp!