utf8和utf8mb4的区别

一、简介

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 字符等等(utf8的缺点)。

通常,计算机在存储字符时,会根据不同类型的字符以及编码方式分配存储空间。例如以下几种编码方式;

①ASCII编码中,一个英文字母(不分大小写)占用一个字节的空间,一个中文汉字占用两个字节的空间。一个二进制的数字序列,在计算机中作为一个数字单元存储时,一般为8位二进制数,换算为十进制。最小值0,最大值255。

②UTF-8编码中,一个英文字符占用一个字节的存储空间,一个中文(含繁体)占用三个字节的存储空间。

③Unicode编码中,一个英文占用两个字节的存储空间,一个中文(含繁体)占用两个字节的存储空间。

④UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要占用2个字节的存储空间(Unicode扩展区的一些汉字存储需要4个字节)。

⑤UTF-32编码中,世界上任何字符的存储都需要占用4个字节的存储空间。

既然utf8能兼容绝大部分的字符,为什么要扩展utf8mb4?

随着互联网的发展,产生了许多新类型的字符,例如emoji这种类型的符号,也就是我们通常在聊天时发的小黄脸表情,这种字符的出现不在基本多平面的Unicode字符之中,导致无法在MySQL中使用utf8存储,MySQL于是对utf8字符进行了扩展,增加了utf8mb4这个编码。

所以,设计数据库时如果想要允许用户使用特殊符号,最好使用utf8mb4编码来存储,使得数据库有更好的兼容性,但是这样设计会导致耗费更多的存储空间。

推荐教程:《php从入门到精通》

以上就是utf8和utf8mb4的区别详解的详细内容,更多请关注考高分网其它相关文章!

utf8和utf8mb4的区别详解相关推荐

  1. axios请求接口http_使用axios请求接口,几种content-type的区别详解

    axios的使用 安装(一般使用框架的话, 脚手架都集成了) $ npm install axios 请求示例 // POST axios.post('/user', { firstName: 'Fr ...

  2. python loads_python dumps和loads区别详解

    这篇文章主要介绍了python dumps和loads区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.概念理解 json是一种轻量级的数 ...

  3. Python str / bytes / unicode 区别详解 - Python零基础入门教程

    目录 一.前言 二.Python str / bytes / unicode 区别 1.Python2.x 版本中 str / bytes / unicode 区别 2.Python3.x 版本中 s ...

  4. python中search和match的区别_Python中正则表达式match()、search()函数及match()和search()的区别详解...

    match()和search()都是python中的正则匹配函数,那这两个函数有何区别呢? match()函数只检测RE是不是在string的开始位置匹配, search()会扫描整个string查找 ...

  5. python类的命名空间_Python之关于类变量的两种赋值区别详解

    我就废话不多说了,还是直接看代码吧! # -*- coding:utf-8 -*- #面试题,写一个方法,将一行字符串中所有的单词数量统计出来 class Person(object): TAG = ...

  6. mysql某个表被行锁了_MySQL 行锁和表锁的含义及区别详解

    一.前言 对于行锁和表锁的含义区别,在面试中应该是高频出现的,我们应该对MySQL中的锁有一个系统的认识,更详细的需要自行查阅资料,本篇为概括性的总结回答. MySQL常用引擎有MyISAM和Inno ...

  7. jQuery height()、innerHeight()、outerHeight()函数的区别详解

    参考来源:http://www.jb51.net/article/84897.htm 代码示例(可复制到编辑器直接打开): 1 <!DOCTYPE html> 2 <html lan ...

  8. python 文件读写with open模式r,r+ w,w+ a,a+区别详解

    python 文件读写with open模式r,r+ w,w+ a,a+区别详解 python中的 with open主要要来进行文件读写的操作 在 Python 中使用文件的关键函数是 open() ...

  9. python sys stdout_关于sys.stdout和print的区别详解

    一.sys.stdout的形式就是print的一种默认输出格式,等于print "%VALUE%" print函数是对sys.stdout的高级封装,看下print函数的解释 Pr ...

最新文章

  1. 虚拟化--015 配置VMware View Event database失败:
  2. yaml语法--多行字符串可以使用|保留换行符,也可以使用>折叠换行
  3. python设计一个动物类_我用Python实现了12500张猫狗图像的精准分类
  4. 【批处理】windows环境将文件放置在虚拟盘
  5. 2017-9-5-Java 泛型
  6. 为何要进入互联网行业做产品经理?
  7. html点击文本框唤醒手机键盘,html移动应用 input 标签 清除按钮功能如何实现(不触发键盘)...
  8. win7美化_Windows桌面美化记(二)这可能是你看过最详细的美化教程
  9. R9000P2021版拯救者 装ubuntu系统相关问题(WiFi、蓝牙、亮度调节,驱动安装)记录总结
  10. windows10安装更新很慢ndows,win10系统更新后运行速度变慢的解决方法 - 系统家园...
  11. 手机计算机数据消失了怎么恢复,手机数据丢失的恢复方法
  12. 应用程序正常初始化(0xc0150002)失败。请单击“确定”,终止应用程序
  13. NLP篇【02】白话Word2vec原理以及层softmax、负采样的实现
  14. 无人机灯光秀,用到了哪些关键技术?
  15. Structure Boundary Preserving Segmentation for Medical Image with Ambiguous Boundary
  16. 钉钉调用新版待办任务
  17. 移动磁盘已用空间0字节要如何办啊
  18. 2019-12-20
  19. android 打开系统键盘的方法
  20. python编程计算圆面积math_python编程计算圆面积

热门文章

  1. 腾讯应用宝认领应用步骤
  2. Discuz3.4 论坛创始人密码忘记重置
  3. android在root权限下实现apk的静默卸载,静默安装,重启
  4. H5网站-微信浏览器中打开底部fixed遮住内容区域问题
  5. 读取linux内核内存,devmem读写物理内存和devkmem读取内核虚拟内存
  6. 局域网文件共享需要打开服务器,局域网共享工具有什么用怎么开启
  7. 中国石油大学 个人训练赛第五场C:所罗门王的宝藏(高斯消元)
  8. 4.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
  9. java一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下 求它在 第10次落地时,共经过多少米?第10次反弹多高?
  10. 响应式网页设计教程:展示响应式设计的基本原理