Câu hỏi này đã có rất nhiều câu trả lời, nhưng Mathias Bynens đã đề cập rằng 'utf8mb4' nên được sử dụng thay vì 'utf8' để có hỗ trợ UTF-8 tốt hơn ('utf8' không hỗ trợ các ký tự 4 byte, các trường được cắt bớt khi chèn ). Tôi coi đây là một sự khác biệt quan trọng. Vì vậy, đây là một câu trả lời khác về cách đặt bộ ký tự và đối chiếu mặc định. Một cái sẽ cho phép bạn chèn một đống poo ().
Điều này hoạt động trên MySQL 5.5.35.
Lưu ý rằng một số cài đặt có thể là tùy chọn. Vì tôi không hoàn toàn chắc chắn rằng mình chưa quên bất cứ điều gì, tôi sẽ biến câu trả lời này thành wiki cộng đồng.
Cài đặt cũ
mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)
Cấu hình
# 💩 𝌆
# UTF-8 should be used instead of Latin1. Obviously.
# NOTE "utf8" in MySQL is NOT full UTF-8: http://mathiasbynens.be/notes/mysql-utf8mb4
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[mysql]
default-character-set = utf8mb4
Cài đặt mới
mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+----------------------+--------------------+
3 rows in set (0.00 sec)
character_set_system luôn là utf8 .
Điều này sẽ không ảnh hưởng đến các bảng hiện có, nó chỉ là cài đặt mặc định (được sử dụng cho các bảng mới). Mã ALTER sau đây có thể được sử dụng để chuyển đổi một bảng hiện có (không có cách giải quyết khôi phục kết xuất):
ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Biên tập:
Trên máy chủ MySQL 5.0: character_set_client, character_set_connection, character_set_results, collation_connection vẫn duy trì ở latin1. Phát hành SET NAMES utf8
(utf8mb4 không có sẵn trong phiên bản đó) cũng đặt những thứ đó thành utf8.
Hãy cẩn thận : Nếu bạn có bảng utf8 với cột chỉ mục loại VARCHAR (255), thì không thể chuyển đổi nó trong một số trường hợp, vì độ dài khóa tối đa bị vượt quá ( Specified key was too long; max key length is 767 bytes.
). Nếu có thể, hãy giảm kích thước cột từ 255 xuống 191 (vì 191 * 4 = 764 <767 <192 * 4 = 768). Sau đó, bảng có thể được chuyển đổi.
utf8mb4
, tức là UTF-8 thực sự với sự hỗ trợ Unicode đầy đủ. Xem Cách hỗ trợ Unicode đầy đủ trong cơ sở dữ liệu MySQL .