mysql 使用 utf8mb4 编码

前言

  • 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

你可能感兴趣的:(mysql)