这个问题已经有很多答案了,但Mathias Bynens提到应该使用'utf8mb4'而不是'utf8'以获得更好的UTF-8支持('utf8'不支持4字节字符,字段在插入时被截断)。我认为这是一个重要的区别。因此,这里又有一个关于如何设置默认字符集和排序规则的答案,它将允许您插入一堆💩。
这适用于MySQL 5.5.35。
请注意,某些设置可能是可选的。由于我不确定是否忘记了什么,所以我会将这个答案设为社区wiki。
旧设置
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)
配置
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[mysql]
default-character-set = utf8mb4
新设置
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 始终为utf8。
这不会影响现有的表格,仅是默认设置(用于新表格)。
可以使用以下ALTER代码来转换现有表格(无需进行倾卸 - 恢复操作):
ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
编辑:
在MySQL 5.0服务器上:character_set_client,character_set_connection,character_set_results,collation_connection仍保持为latin1。发出SET NAMES utf8
命令(utf8mb4在该版本中不可用)也会将它们设置为utf8。
注意:
如果您有一个utf8表,其中包含类型为VARCHAR(255)的索引列,则在某些情况下无法转换,因为超过了最大键长度(指定的键太长;最大键长度为767个字节
)。如果可能,请将列大小从255减小到191(因为191 * 4 = 764 < 767 < 192 * 4 = 768)。之后,可以转换表格。
utf8mb4
,即具有完全 Unicode 支持的真正 UTF-8。请参阅如何在 MySQL 数据库中支持完整的 Unicode。 - Mathias Bynens