暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

mtf8mb3迁移到mysql8注意事项

原创 黄江平 2022-04-07
1614

1.前言
utf8mb4字符集是MySQL 8.0的新默认字符集,这个改变既不影响现有的数据,也不强制任何升级。如果从字符集utf8mb3迁移数据,需要注意迁移后数据最大长度问题。utf8mb4有一个优点是它可以存储更多的符号,包括表情符号。
2.测试
utf8mb4一个字符占4个字节,而utf8mb3是一个字符占3字节。

mysql [localhost:8026] {root} (test) > SET NAMES utf8mb4;
Query OK, 0 rows affected (0.00 sec)

mysql [localhost:8026] {root} (test) > CREATE TABLE test_char (
-> id int unsigned NOT NULL AUTO_INCREMENT,
-> c1 char(1),
-> PRIMARY KEY (id)
-> )CHARACTER SET=utf8mb3;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql [localhost:8026] {root} (test) > INSERT INTO test_char(id,c1) VALUES(1,‘㉿’);
Query OK, 1 row affected (0.01 sec)

mysql [localhost:8026] {root} (test) > CREATE TABLE test_char_2 (
-> id int unsigned NOT NULL AUTO_INCREMENT,
-> c1 char(1),
-> PRIMARY KEY (id)
-> )CHARACTER SET=utf8mb4;
Query OK, 0 rows affected (0.01 sec)

mysql [localhost:8026] {root} (test) > INSERT INTO test_char_2(id,c1) VALUES(1,‘㉿’);
Query OK, 1 row affected (0.01 sec)

image.png

image.png

从这个插入的字符可以看出,utf8mb4可以写入更多的emoji表情。

image.png

从空间占用来看,utf8mb4可以存占用4字节的emoji表情。

image.png

报超过最大长度,因为mysql varchar最大字节是65535,utf8mb3的最大长度应该是65535/3=21845,而utf8mb4的最大长度为65535/4=16383.这个报错也提示了,如果字段长计超过16383的,只能改为text或longtext数据类型。

3.小结
原字符集uft8mb3迁移到mysql8时,将所有存储超过16383个字符的VARCHAR列转换为TEXT或LONGTEXT数据类型。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论