一、简介

MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。

二、内容描述

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

三、问题根源

最初的 UTF-8 格式使用一至六个字节,最大能编码 31 位字符。最新的 UTF-8 规范只使用一到四个字节,最大能编码21位,正好能够表示所有的 17个 Unicode 平面。

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

Mysql 中的 utf8 为什么只支持持最长三个字节的 UTF-8字符呢?我想了一下,可能是因为 Mysql 刚开始开发那会,Unicode 还没有辅助平面这一说呢。那时候,Unicode 委员会还做着 “65535 个字符足够全世界用了”的美梦。Mysql 中的字符串长度算的是字符数而非字节数,对于 CHAR 数据类型来说,需要为字符串保留足够的长。当使用 utf8 字符集时,需要保留的长度就是 utf8 最长字符长度乘以字符串长度,所以这里理所当然的限制了 utf8 最大长度为 3,比如 CHAR(100)  Mysql 会保留 300字节长度。至于后续的版本为什么不对 4 字节长度的 UTF-8 字符提供支持,我想一个是为了向后兼容性的考虑,还有就是基本多文种平面之外的字符确实很少用到。

要在 Mysql 中保存 4 字节长度的 UTF-8 字符,需要使用 utf8mb4 字符集,但只有 5.5.3 版本以后的才支持(查看版本: select version();)。我觉得,为了获取更好的兼容性,应该总是使用 utf8mb4 而非 utf8.  对于 CHAR 类型数据,utf8mb4 会多消耗一些空间,根据 Mysql 官方建议,使用 VARCHAR  替代 CHAR。

转载于:https://www.cnblogs.com/Dennis-mi/articles/8098122.html

Mysql 的utf8和utf8mb4相关推荐

  1. 浅谈MySQL中utf8和utf8mb4的区别

    一.什么是UTF8MB4? 我们在使用PhpMyAdmin管理面板时,可以在首页看到名为"Server connection collation"(服务器连接排序规则)的选项,用来 ...

  2. 清官谈mysql中utf8和utf8mb4区别,请使用utf8mb4

    一.简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.好在utf8mb4是utf8的超集,除了将编码改为ut ...

  3. 清官谈mysql中utf8和utf8mb4区别

    转载地址: http://ourmysql.com/archives/1402 utf8mb4可以保存一些表情,然后utf8mb4是utf8的超集,我就记住这些哈下面转载内容 一.简介 MySQL在5 ...

  4. Mysql的utf8与utf8mb4区别,utf8mb4_bin、utf8mb4_general_ci、utf8mb4_unicode_ci区别

    UTF-8是使用1~4个字节,一种变长的编码格式,字符编码.mb4即 most bytes 4,使用4个字节来表示完整的UTF-8. mysql的 utf8 编码最大字符长度为 3 字节,如果遇到 4 ...

  5. MySQL的utf8与utf8mb4编码,以及utf8_bin、utf8_general_ci编码区别

    utf8和utf8mb4的区别 一.简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.utf8mb4是utf ...

  6. mysql中utf8和utf8mb4的详解用法与区别

    一.简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.好在utf8mb4是utf8的超集,除了将编码改为ut ...

  7. MySQL中 utf8 和 utf8mb4 的区别,以及 general_ci 、unicode_ci和unicode_520_ci的区别

    首先了解什么是Unicode: Unicode是一种信息技术(IT)标准,用于对世界上大多数书写系统中表示的文本进行一致的编码,表示和处理. 大致意思就是Unicode对英文字符.符号.汉字.表情符号 ...

  8. mysql字符集 utf8 和utf8mb4 的区别

    文章目录 @[toc] 总结速览 什么是编码?什么是 UTF-8? mysql中的utf8与utf8mb4 为什么使用utf8mb4 总结 最后 用mysql创建数据库表时,一般都会选择用utf-8编 ...

  9. 全面了解mysql中utf8和utf8mb4的区别

    一.简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.好在utf8mb4是utf8的超集,除了将编码改为ut ...

最新文章

  1. 腾讯首位17级研究员/杰出科学家诞生
  2. 山西最值得一去的5座古镇,你都去过吗?
  3. Shiro-550反序列化漏洞复现
  4. 浅谈Solr和ElasticSearch建索引性能优化策略
  5. 红魔游戏手机6S Pro星耀白版开启预约:4399元起10月15日正式首销
  6. Google 杀死了 160 个产品!
  7. 删除oracle 连接进程,如何查看和清除oracle无用的连接进程
  8. android添加工程依赖工程,Android Studio为项目加上模块依赖的图文方法
  9. 相机标定原理介绍(一)
  10. robocode_Robocode大师的秘密,预测性定位
  11. Himawari-8(H8)卫星数据预处理
  12. 南邮转专业计算机科学与技术,南京邮电大学本科生转专业管理办法(2020年10月9日修订)...
  13. 计算机网络原理视频学习教程
  14. android smsmanager发送短信,Android使用SmsManager实现短信发送功能
  15. 高等数学:第一章 函数与极限(6)极限存在准则、两个重要极限
  16. excel表格打印每页都有表头_EXCEL打印小技巧:如何打印出每张纸上都有表头标题的表格?...
  17. IDEA安装及破解永久版教程————鹏鹏
  18. 用计算机的画图工具画画,电脑绘画软件哪个好用?电脑绘画软件推荐
  19. http响应最大时长 nginx_请问一下该如何用nginx 设置响应时间?
  20. 基于NRF52832蓝牙芯片的电子价签(电子墨水屏)

热门文章

  1. android学习--TabHost选项卡组件
  2. Fragment与Acitvity通信
  3. [在windows上使用Unix工具]cygwin
  4. 以色列网络武器出口对象国从102个锐减至37个
  5. 手把手教你详细分析 Chrome 1day 漏洞 (CVE-2021-21224)
  6. 我如何判断漏洞奖励计划是否值得参加?如何获得最大收益?
  7. GPU产品源代码被盗?AMD 证实称仅为测试文件
  8. H3C SecPath U200-S 如何在内网使用外网IP地址访问内网服务器
  9. ios中数据存储方式
  10. linux中程序包管理方式出现的原由(转载)