mysql 使用 utf8mb4 编码

前言

  • MySQL 操作版本: 5.7.26

为什么要使用 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值