前言
- MySQL 操作版本: 5.7.26
为什么要使用 utf8mb4?
最直接的理由可以参考这两个:
- How to support full Unicode in MySQL databases。
- 如果遇到错误 Incorrect string value: ‘\xF0\x9F\x92\x94’ 也需要升级到 utf8mb4 。
比较完整的理由:
- utf-8编码按照3个字节一个单位进行编码, 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。因此,任何不在基本多文本平面的 Unicode字符,都无法使用 utf-8 字符集存储。比如,Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),不常用的汉字,任何新增的 Unicode 字符等等。
- utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。
MySQL 支持 utf8mb4 的版本
MySQL 5.5.3 开始支持 utf8mb4。
创建新的库
创建数据库时使用 utf8mb4
CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
创建表时使用 utf8mb4
CREATE TABLE `account` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`nickname` varchar(50) NOT NULL COMMENT '名称',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_name` (`nickname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='账号';
升级已有的库
升级MySQL
- 先备份数据库
- 确保MySQL 版本 >= 5.5.3
- 配置mysql.ini
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
操作完成后记得重启MySQL
升级库和表
升级库:
ALTER DATABASE yourdbname CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
升级表:
ALTER TABLE yourtablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
升级字段:
ALTER TABLE yourtablename CHANGE column_name new_column_name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
参考
How to support full Unicode in MySQL databases
Mysql UTF-8mb4字符集的问题
彻底解决:java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\x94’ for column ‘name’ at row 1