irpas技术客

[Err] 1115 - Unknown character set: ‘utf8mb4‘ 解决和关于Mysql编码格式的讨论;_OGtwelve

irpas 1559

[Err] 1115 - Unknown character set: 'utf8mb4' // 只需要将mysql版本更新至 5.5 以上即可 [Err] CREATE TABLE `account` ( `account_id` int NOT NULL AUTO_INCREMENT, `account_phone` varchar(11) DEFAULT NULL, `account_email` varchar(20) DEFAULT NULL, `account_id_card` varchar(18) DEFAULT NULL, `account_age` varchar(2) DEFAULT NULL, `account_gender` varchar(1) DEFAULT NULL, `account_balance` decimal(9,0) DEFAULT NULL, `user_id` int DEFAULT NULL, PRIMARY KEY (`account_id`), KEY `user_id` (`user_id`), CONSTRAINT `account_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;


同样也是今天在协助社区人的时候发现的问题, 因为我本人一直使用的是比较新的Mysql版本, 所以也一直没有遇到过这种情况;

我的第一反应是直接更换utf8mb4为utf8, 但是我隐约的记得这两个使用的版本有点区别, 于是在我查阅官网的介绍时发现, utf8作为建议5.6版本以前使用的编码格式, 主要是因为utf8是每个字符最多分配3个字节,而我们正儿八经熟知的UTF-8格式的编码为每个字符最多分配4个字节, 所以这块肯定是有区别的, 于是在后来的更新中便出现了utf8mb4和utf8mb3。 其中最常用的UTF-8替代则为utf8mb4;

知道utf8mb4是UTF-8的替代后, 要考虑那么utf8mb3又是什么, 区别在哪些地方;



这个是由官方文档给出的解释:

在关于utf8mb4和utf8mb3的区别上, utf8mb3仅支持基本多语言平面 (BMP) 中的字符。utf8mb4还支持位于 BMP 之外的补充性字符.对于一个 BMP 字符,utf8mb4具有 utf8mb3相同的存储特性:相同的代码值、相同的编码、相同的长度.对于补充字符,utf8mb4 需要四个字节来存储它,而 utf8mb3根本不能存储字符。将utf8mb3列转换为 时 utf8mb4,不必担心转换补充字符,因为没有.对于可变长度字符数据类型(VARCHAR 和 TEXT 类型),utf8mb4列的最大允许字符长度需小于utf8mb3列的最大允许字符长度.对于所有字符数据类型(CHAR、VARCHAR 和 TEXT 类型),utf8mb4可以索引的最大字符数小于utf8mb3.

因此,要将表从utf8mb3转换为utf8mb4,可能需要更改某些列或索引定义。

utf8mb3从到 转换时utf8mb4的问题是列或索引键的最大长度在 字节方面没有变化。因此,它在 字符方面更小,因为字符的最大长度是四个字节而不是三个。对于 CHAR、 VARCHAR和 TEXT数据类型,请在转换 MySQL 表时注意以下问题:

检查utf8mb3列的所有定义并确保它们不超过存储引擎的最大长度。检查utf8mb3列上的所有索引并确保它们不超过存储引擎的最大长度。有时,由于存储引擎的增强,最大值可能会发生变化。

如果上述条件适用,则必须减少列或索引的定义长度,或者继续使用 utf8mb3而不是 utf8mb4.

InnoDB引擎对于使用 紧凑型 或者 冗余形 格式的表时,最大索引长度为 767 个字节,因此对于utf8mb3或者utf8mb4,我们最多可以分别索引 255 或 191 个字符。那如果当前有utf8mb3索引长度超过 191 个字符的列,则必须索引较少数量的字符;


其实多数时候这些看似不起眼的细节也会起到决定性的作用, 所以 加油吧各位 !


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #ERR #1115 #Unknown #character #set #utf8mb4