mysql utf8】_【MySQL】关于字符集UTF8的误解,强烈建议大家换成UTF8MB4

关于字符集问题,大家都对UTF8很熟悉。在MySQL中UTF8和UTF8MB4有什么区别呢?为什么强烈建议大家从UTF8换成UTF8MB4呢?下面的报错呢?大家是否眼熟呢?这是我碰到的一个报错:Incorrect string value: '\\xF0\\xA4\\x8B\\xAE')...' for column 'text'

关于他们的区别,我的第一感觉是UTF8MB4可以存入表情符而UTF8不可以?不知道大家的第一感觉是不是这样呢?最近部署东西用的是8.0,中间偶然的测试碰到类似的报错,通过排查后,发现和字符集有关,自己原先对UTF8的理解有误差,不完全正确。现在暂且不解释,大家先看下面的例子,然后再做解释。

a、创建表结构:CREATE TABLE `t` (

`s1` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL

)

b、插入相关语句:insert into t values('啊')

insert into t values('𤋮')

测试完毕后,大家应该会看到和我开头说的信息类似的报错?为啥呢?插入中文都会报错,这就是为啥我强烈推荐大家使用UTF8MB4字符集的原因!!!

上面的列子是从实际应用中,给大家的解释。下面我从MySQL的官方文档层面的解释来解释这个问题:utf8 is an alias for the utf8mb3 character set

The utf8mb3 character set has these characteristics:

Supports BMP characters only (no support for supplementary characters)

Requires a maximum of three bytes per multibyte character.

Applications that use UTF-8 data but require supplementary character support should use utf8mb4 rather than utf8mb3

通俗点讲,UTF8只支持3-Byte UTF-8 Unicode Encoding,支支持BMP而不支持supplementary characters;相反UTF8MB4则同时支持以上两种,比UTF多了1Byte。如果大家有时间的话,可以测试下上面的语句是不是在UTF8MB4的时候都可以插入呢?

我们的汉字很多,通俗点理解就是我们有点汉字用到了supplementary characters,而有的汉字仅仅BMP characters即可。关于具体的汉字所用到那种,我就不去深入研究了。实在搞不懂。如果有特别熟悉的朋友,是否可以来个通俗的理解法呢?谢谢!

总而言之,对于MySQL来说,强烈建议大家使用UTF8MB4字符集,千万不要再使用UTF8了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值