MYSQL(8.0版本及以上)- utf8,utf8mb3和utf8mb4的含义和由来
创始人
2025-01-10 17:07:31
0

文章目录

  • 一、utf8、utf8mb3、utf8mb4的区别
    • 1.1、差异比较

官方文档:MySQL 8.0 Reference Manual: 10.9.2 The utf8mb3 Character Set (3-Byte UTF-8 Unicode Encoding)

以下内容基于MySQL8.0进行讲解

一、utf8、utf8mb3、utf8mb4的区别

首先,上结论:

  • utf8mb3: utf8的别名,在MySQL中,实际只有utf8mb4和utf8mb3。至于uft8,在 V8.0 还是指代的utf8mb3,未来的会变为uft8mb4。
  • 国际上的UTF-8,在MySQL中,对标的是uft8mb4。

译者注:mb3 maximun of 3 bytes per multibyte character.
mb3每个多字节字符最多3个字节。

国际上的UTF-8简介
Java Unicode编码 及 Mysql utf8 utf8mb3 utf8mb4 的区别与utf8mb4的过滤 ——苍枫露雨


UTF-8(8-bit Unicode Transformation Format) 是一种针对Unicode的可变长度字符编码,也是一种前缀码。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容——这使得原来处理ASCII字符的软件无须或只须做少部分修改 即可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或发送文字的应用中,优先采用的编码。


UTF-8使用1~4个字节为每个字符编码(2003年11月UTF-8被RFC 3629重新规范,只能使用原来Unicode定义的区域,U+0000到U+10FFFF,也就是说最多四个字节):

  • 128个US-ASCII字符只需1个字节编码(Unicode范围由U+0000至U+007F)。
  • 带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要2个字节编码(Unicode范围由U+0080至U+07FF)。
  • 基本多文种平面/BMP, Basic Multilingual Plane:字符(这包含了大部分常用字,例如CJVK常用字字符集 —— Chinese, Japanese, Vietnam, Korean)使用3个字节编码(Unicode范围由U+0800至U+FFFF)。
  • Unicode 辅助平面/Supplementary Multilingual Plane:使用极少,字符使用4个字节编码(Unicode范围由U+10000至U+10FFFF,主要包括不常用的CJK字符, 数学符号, emoji表情等)。

具体来讲是这样的:
1.utf8

由于Unicode字符集规定必须用两个字节,也就是16位-32位,那些只需一个字节的字符在互联网上进行传输的时候就会比较浪费网络带宽资源,于是出现了一些中间格式的字符集,被称为统一的转换格式(Unicode Transformation format),即UTF编码,UTF-8是针对Unicode的一种可变长度字符编码。
  一个英文字符在UTF-8编码中占一个字节, 一个汉字占三个字节。

utf8 是 MySQL中的一种字符集,utf8是utf8mb3的别名,除此之外并无不同(如下图,MySQL官网已经给出说明)
在这里插入图片描述
(MySQL的)utf8utf8mb3的别名:

  • MySQL里,utf8的(命名)是隐式的,等价于utf8mb3,但是但从名称上是看不出最大字符数的。

好消息是MySQL在未来会改正uft8的命名:“在未来的MySQL版本中会删除utf8mb3,请改用utf8mb4。虽然utf8目前是utf8mb3的别名,但在未来某个时候,utf8将指代utf8mb4。为了避免对utf8的含义产生歧义,可以考虑直接把字符集引用指定为utf8mb4,而不是utf8。”

2.uft8mb3

  • 支持&仅且支持BMP characters(不支持补充字符(supplementary characters))
  • 每个multibyte-character,都不多于3个bytes
    在这里插入图片描述

3.uft8mb4

  • uft8mb4是utf8的超集并完全兼容它,是MySQL 在 5.5.3 版本之后增加的一个新的字符集,能够用四个字节存储更多的字符,几乎包含了世界上所有能看到见的语言字符。故utf8mb4才是我们真正意义上的utf8字符集
  • 支持BMP和补充字符。
  • 每个多字节字符最多需要四个字节。
  • 要想支持BMP characters + supplementary characters,既国际上的UTF-8/(4bytes),用uft8mb4(见官方文档 Section 10.9.1, “The utf8mb4 Character Set (4-Byte UTF-8 Unicode Encoding)”)

在这里插入图片描述

1.1、差异比较

差异点utf8mb3utf8mb4
最大使用字节数34
支持字符类型BMPBMP+其他补充字符
字符类型常见的 Unicode 字符常见的 Unicode 字符 + 部分罕用汉字 + emoji表情 + 新增的 Unicode 字符等
Unicode范围U0000 - U+FFFF(即BMP)U0000 - U+10FFFF
占用存储空间略小(如CHAR(10) 需要10 * 3 = 30 个字节的空间;VARCHAR 类型需要额外使用1个字节来记录字符串的长度)稍大(如CHAR(10) 需要 10 * 4 = 40 个字节的空间;VARCHAR 类型需要额外使用2个字节来记录字符串的长度)
兼容性切换至utf8mb4 一般不会有问题,但要注意存储空间够不够、排序规则是否变化切换至utf8mb3可能会有问题,字符丢失、报错或乱码
安全性稍低,更容易被恶意字符串攻击较高,保留恶意字符串,然后报错或乱码提示

如何选择?
一句话就是,根据具体的业务需求和实际情况,选择最合适的字符集。


相关内容

热门资讯

第六分钟安装!wepoker代... 第六分钟安装!wepoker代打辅助机器人,wepokerplus辅助,必备教程(有挂方针)-哔哩哔...
第3分钟带你发现!微乐四川亲友... 大家好,今天小编来为大家解答微乐四川亲友圈辅助器这个问题咨询软件客服可以免费测试直接加微信(1367...
四分钟晓得!小程序蜀山四川免费... 四分钟晓得!小程序蜀山四川免费辅助器,新天道挂机辅助,解密教程(有挂详情)-哔哩哔哩;致您一封信;亲...
四分钟带你透视!新海贝辅助器,... 四分钟带你透视!新海贝辅助器,丽水都莱辅助工具,AI教程(有挂细节)-哔哩哔哩【无需打开直接搜索加薇...
九分钟理解!决战卡五星开挂方法... 九分钟理解!决战卡五星开挂方法,大菠萝789辅助,教你教程(有挂细节)-哔哩哔哩相信很多朋友都在电脑...
七分钟带你发现!中至上饶辅助,... 七分钟带你发现!中至上饶辅助,微友辅助神器下载,新2026教程(有挂技术)-哔哩哔哩;无需打开直接搜...
6分钟晓得!微乐智能辅助真的假... 6分钟晓得!微乐智能辅助真的假的,四川熊猫辅助软件,揭秘教程(有挂解密)-哔哩哔哩;微乐智能辅助真的...
一分钟带你辅助!樱花之盛正版辅... 一分钟带你辅助!樱花之盛正版辅助器免费,樱花之盛辅助软件,切实教程(有挂详细)-哔哩哔哩 了解更多开...
7分钟晓得!pokernow辅... 7分钟晓得!pokernow辅助工具,哈糖大菠萝破解器,黑科技教程(有挂助手)-哔哩哔哩;致您一封信...
1分钟带你开挂!花城牌舍怎么设... 1分钟带你开挂!花城牌舍怎么设置辅助,汇友游戏辅助软件,攻略教程!(有挂方针)-哔哩哔哩;亲,花城牌...