在MySQL中,utf8
和 utf8mb4
是两种常见的字符集,它们用于存储Unicode字符。尽管它们听起来相似,但存在一些关键的区别,这些区别对于支持某些特定字符(如表情符号)非常重要。
utf8 和 utf8mb4 的主要区别:
- 字符覆盖范围:
utf8
编码最多使用3个字节来表示一个字符,但它实际上只覆盖了Unicode字符集的基本多文种平面(BMP),即U+0000至U+FFFF之间的字符。这包括世界上大多数语言的字符,但不包括一些较新的Unicode字符,如一些表情符号(emoji)和其他一些特殊符号,这些字符位于BMP之外的辅助平面(U+10000至U+10FFFF)。utf8mb4
是utf8
的超集,使用最多4个字节来表示一个字符,因此它能够存储Unicode标准中的所有字符,包括BMP中的字符和辅助平面中的字符。
- 兼容性:
- 由于
utf8mb4
涵盖了utf8
的所有字符以及更多,因此它是utf8
的完全兼容超集。如果你的应用需要支持BMP之外的字符,如表情符号,那么应该使用utf8mb4
。
- 由于
- 默认行为:
- 在较新版本的MySQL中(MySQL 5.5.3及以后),
utf8mb4
是推荐的字符集,因为它提供了更全面的Unicode支持。不过,请注意,即使在支持utf8mb4
的MySQL版本中,默认的字符集仍然是utf8
(仅覆盖BMP),除非你明确指定或更改了默认设置。
- 在较新版本的MySQL中(MySQL 5.5.3及以后),
具体使用时用什么?
- 如果你的应用需要支持全Unicode字符集,包括表情符号和其他位于BMP之外的字符,那么应该使用
utf8mb4
。 - 如果你的应用只需要支持基本的Unicode字符(即BMP内的字符),并且出于某种原因(如向后兼容性或节省空间)想要使用
utf8
,那么可以这样做,但请注意你可能无法存储所有Unicode字符。
如何在MySQL中使用 utf8mb4
?
- 在创建数据库或表时,可以指定字符集为
utf8mb4
。
CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE mytable (
id INT AUTO_INCREMENT PRIMARY KEY,
text VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
);
- 在MySQL配置文件中(如
my.cnf
或my.ini
),可以设置默认字符集为utf8mb4
。
- 确保你的应用程序在连接到MySQL数据库时也使用
utf8mb4
编码。这通常涉及到在数据库连接字符串中指定字符集,或者在连接后执行类似SET NAMES 'utf8mb4'
的SQL命令。