2011-10-18 37 views
53

Tôi đang sử dụng mysql 5.5.10, và CHARACTER_SETS của nó làLàm thế nào để chèn ký tự utf-8 mb4 (biểu tượng cảm xúc trong ios5) vào mysql?

| character_set_client  | utf8mb4     | 
| character_set_connection | utf8mb4     | 
| character_set_database | utf8mb4     | 
| character_set_filesystem | binary      | 
| character_set_results | utf8mb4     | 
| character_set_server  | utf8mb4     | 
| character_set_system  | utf8      | 
| character_sets_dir  | /usr/share/mysql/charsets/ | 
| collation_connection  | utf8mb4_general_ci   | 
| collation_database  | utf8mb4_general_ci   | 
| collation_server   | utf8mb4_general_ci   | 

tôi đã thay đổi utf8mb4 từ utf8 cho biểu tượng cảm xúc iOS5 của. Chúng được thể hiện bằng mã 4byte.

Nhưng khi tôi chèn 3 biểu tượng cảm xúc, '???' là trong mysql.

Chúng là 3F 3F 3F (Hex).

Tôi có thể lưu trữ biểu tượng cảm xúc của iOS4 tốt chứ không phải iOS5.

Tôi làm cách nào để lưu trữ biểu tượng cảm xúc của iOS5?

Hãy giúp tôi.

+1

mysql phpadmin hiển thị ??? nhưng ứng dụng iOS có thể hiển thị biểu tượng cảm xúc. –

+0

Xem thêm http://stackoverflow.com/questions/38363566/trouble-with-utf8-characters-what-i-see-is-not-what-i-stored/, đặc biệt là thảo luận về "dấu chấm hỏi". –

Trả lời

91

4 ký tự Unicode byte chưa được sử dụng rộng rãi, vì vậy không phải mọi ứng dụng đều hỗ trợ chúng hoàn toàn. MySQL 5.5 hoạt động tốt với 4 ký tự byte khi được cấu hình đúng - kiểm tra xem các thành phần khác của bạn có thể hoạt động với chúng hay không.

Dưới đây là một vài điều khác để kiểm tra:

  • Hãy chắc chắn rằng các bộ ký tự mặc định tất cả các bảng của bạn và các lĩnh vực văn bản được chuyển đổi thành utf8mb4, ngoài việc thiết lập các khách hàng & bộ ký tự máy chủ, ví dụ ALTER TABLE mytable charset=utf8mb4, MODIFY COLUMN textfield1 VARCHAR(255) CHARACTER SET utf8mb4,MODIFY COLUMN textfield2 VARCHAR(255) CHARACTER SET utf8mb4; v.v.

    Nếu dữ liệu của bạn đã có trong bộ ký tự utf8, nó sẽ chuyển thành utf8mb4 tại chỗ mà không gặp bất kỳ sự cố nào. Như thường lệ, hãy sao lưu dữ liệu của bạn trước khi thử!

  • Cũng đảm bảo lớp ứng dụng của bạn đặt ký tự kết nối cơ sở dữ liệu của nó thành utf8mb4. Kiểm tra kỹ điều này thực sự xảy ra - nếu bạn đang chạy một phiên bản cũ hơn của thư viện máy khách mysql của khung công tác đã chọn của bạn, nó có thể chưa được biên dịch với sự hỗ trợ utf8mb4 và nó sẽ không đặt bộ ký tự đúng cách. Nếu không, bạn có thể phải tự cập nhật hoặc tự biên dịch.

  • Khi xem dữ liệu của bạn thông qua ứng dụng khách mysql, đảm bảo bạn đang sử dụng máy có thể hiển thị biểu tượng cảm xúc và chạy SET NAMES utf8mb4 trước khi chạy bất kỳ truy vấn nào.

Khi mọi cấp ứng dụng của bạn có thể hỗ trợ các ký tự mới, bạn sẽ có thể sử dụng chúng mà không bị hỏng.

+1

Cách xác minh bước thứ 2? – BufferStack

+0

'grep -R" SET NAMES "*' – redolent

+0

Nếu 'textfield1' được lập chỉ mục, bạn có thể gặp khó khăn vì các chỉ mục bị giới hạn ở 767 byte. (Có rất nhiều chủ đề thảo luận về điều này, tìm kiếm "191".) –

63

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:

Hy vọng điều này sẽ giúp.

+0

Xin chào, ở bước 3, tôi có phải làm điều đó cho mỗi bảng, cột trong db của tôi không? hoặc chỉ với bảng và cột tôi muốn lưu trữ biểu tượng cảm xúc trong? bởi vì ngay bây giờ tôi đang thay đổi chỉ một cột và ngay sau khi tôi đặt 'SET character_set_results = utf8mb4;' Tôi không thể thực hiện bất kỳ truy vấn nào trên bất kỳ bảng nào. Tôi đang metting một 'Server được gửi charsetnr uknown. Vui lòng báo cáo lỗi! (ngay cả đối với các truy vấn chọn) – iamserious

+0

@iamserious - Không đặt 'kết quả', đặt tất cả 3 thứ, như với' SET NAMES' hoặc tham số kết nối. –

+0

Hướng dẫn tuyệt vời! Bạn có biết tại sao sau khi đặt 'character-set-server = utf8mb4' trong my.cnf, sau khi chạy truy vấn trên cơ sở dữ liệu thì kết quả là ký tự-set-server thực sự là latin1? Bạn có biết tại sao không cập nhật? Cảm ơn nhiều! – johnnyfittizio

Các vấn đề liên quan