mysql字符集 utf8 和utf8mb4 的区别

用mysql创建数据库表时,一般都会选择用utf-8编码(防中文乱码,通用性)

对自己以前的小项目及平时学习,utf-8是足够了的,一直也没有遇到过什么问题,后面公司中的表都是用的utf-8mb4(强制要求),刚开始也不懂为什么,也没太当回事,后面无意看到一篇讲utf-8与utf-8mb4的区别后,才明白两个到底什么关联,什么区别。

建议以后不管自己用还是公司都都将数据库/表的字符集编码设置成utf8mb4。

学mysql时 utf8支持四个字节的话 好像早就忘了吧,感觉mysql这个开端不好(开头不重视,觉得简单,但是却一直没有做到学以致用)。

总结速览

总结一下,其实mysql中的utf8并不是真正的支持每个字符最大四个字节,而是三个字节,中文是占3个字节,其他数字、英文、符号占一个字节。自己日常使用影响不大,但是emoji符号占4个字节,一些较复杂的文字、繁体字也是4个字节。

但是在公司建表一定要使用utf8mb4字符编码,原因如下

  1. 因为你保不准之后写入数据是否有emoji符号(常用场景如 用户昵称),用户昵称中带有符号很正常,但是你这边一插入,数据库就报错,无法控制。
  2. utf8mb4是对utf8的一种扩展,就是为了修复utf8最多只支持三个字节的字符这个问题。utf8mb4是真正的支持四个字节的字符。
  3. 越来越多的公司或用户都在使用utf8mb4,如果现在还用utf8后期想扩展成utf8mb4就需要重新构建数据库,庞大的数据量和工作量,会给后期添加天大的障碍。

什么是编码?什么是 UTF-8?

我们都知道,计算机使用 0 和 1 来存储文本。比如字符“C”被存成“01000011”,那么计算机在显示这个字符时需要经过两个步骤:

  1. 计算机读取“01000011”,得到数字 67,因为 67 被编码成“01000011”。
  2. 计算机在 Unicode 字符集中查找 67,找到了“C”。

同样的:

  1. 我的电脑将“C”映射成 Unicode 字符集中的 67。
  2. 我的电脑将 67 编码成“01000011”,并发送给 Web 服务器。

几乎

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值