[MySQL数据库] mysql中utf8和utf8mb4的区别

[复制链接]
发表于 2023-5-22 19:19:13
MySQL在5.5.3之后加入了这个utf8mb4编码,mb4表示最多4个字节,专门用来兼容四字节的unicode。幸运的是,utf8mb4是utf8的超集,除了将编码改为utf8mb4外,不需要其他转换。当然,为了节省空间,通常使用utf8就足够了。



   二、内容说明



   上面说了,既然utf8可以存储大部分汉字,为什么还要用utf8mb4呢?原来mysql支持的utf8编码最大字符长度为3个字节。如果遇到 4 字节宽的字符,将插入异常。 .三字节UTF-8所能编码的最大Unicode字符为0xffff,即Unicode中的Basic Multilingual Plane (BMP)。也就是说,任何不在 Basic Multitext Plane 中的 Unicode 字符都不能使用 Mysql 的 utf8 字符集存储。包括Emoji表情(Emoji是一种特殊的Unicode编码,常见于ios和android手机),以及很多不常用的汉字,以及任何新的Unicode字符等。



   3. 问题根源



   最初的 UTF-8 格式使用 1 到 6 个字节,最多可以编码 31 个字符。最新的 UTF-8 规范仅使用一到四个字节,最多可以编码 21 位,刚好足以表示所有 17 个 Unicode 平面。



   Utf8是Mysql中的一个字符集,只支持最多三个字节的UTF-8字符,是Unicode中的基本多文本平面。



   为什么Mysql中的utf8只支持最多三个字节的UTF-8字符?想了想,可能是Mysql刚开发的时候,Unicode没有辅助平面的缘故。那时,Unicode委还在做着“65535个字符足够全S界使用”的梦想。 Mysql中字符串的长度是按字符数计算的,而不是按字节数计算的。对于CHAR数据类型,需要为字符串预留足够的长度。使用utf8字符集时,需要保留的长度是utf8中最长字符的长度乘以字符串的长度,所以utf8的最大长度被限制为3是很自然的,例如CHAR (100) Mysql会保留300字节的长度。至于为什么后续版本不支持4字节的UTF-8字符,我觉得一是出于向后兼容的考虑,二是Basic Multilingual Plane之外的字符很少使用。



   在Mysql中保存4字节的UTF-8字符,需要使用utf8mb4字符集,但只有5.5.3及以后的版本才支持(查看版本:select version();)。我认为为了更好的兼容性,您应该始终使用 utf8mb4 而不是 utf8。对于CHAR类型的数据,utf8mb4会占用更多的空间。根据Mysql官方的建议,使用VARCHAR而不是CHAR。

19191354232[下载].rar



上一篇:这是动态添加布局,做的很完善,还有SQLite的存储功能,是一个树
下一篇:完整的MySQL开发规范,进大厂必看(大厂mysql面试题)

使用道具 举报

Archiver|手机版|小黑屋|吾爱开源 |网站地图

Copyright 2011 - 2012 Lnqq.NET.All Rights Reserved( ICP备案粤ICP备14042591号-1粤ICP14042591号 )

关于本站 - 版权申明 - 侵删联系 - Ln Studio! - 广告联系

本站资源来自互联网,仅供用户测试使用,相关版权归原作者所有

快速回复 返回顶部 返回列表