相关内容:
记一次Mysql查询字段为空串在java中使用equals不相等的问题
Mysql 批量更改数据表和字段的字符集(Mysql UTF-8字符集更改为utf8mb4字符集)

前言

我们新建mysql数据库的时候,需要指定数据库的字符集,一般我们都是选择utf8这个字符集,但是还会又一个utf8mb4这个字符集,好像和utf8有联系,今天就来解析一下这两者的区别。

起源

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

为什么mysql有utf8和utf8mb4两种几乎差不多的字符集

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 版本以后的才支持。我觉得,为了获取更好的兼容性,应该总是使用 utf8mb4 而非 utf8. 对于 CHAR 类型数据,utf8mb4 会多消耗一些空间,根据 Mysql 官方建议,使用 VARCHAR 替代 CHAR。

为什么要使用utf8mb4字符集

既然utf8应付日常使用完全没有问题,那为什么还要使用utf8mb4呢? 低版本的MySQL支持的utf8编码,最大字符长度为 3 字节,如果遇到 4 字节的字符就会出现错误了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xFFFF,也就是 Unicode 中的基本多文平面(BMP)。也就是说,任何不在基本多文平面的 Unicode字符,都无法使用MySQL原有的 utf8 字符集存储。这些不在BMP中的字符包括哪些呢?最常见的就是Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和一些不常用的汉字,以及任何新增的 Unicode 字符等等。
那么utf8mb4比utf8多了什么的呢?
多了emoji编码支持.
如果实际用途上来看,可以给要用到emoji的库或者说表,设置utf8mb4.
比如评论要支持emoji可以用到。

新建mysql库的排序规则

utf8_unicode_ci比较准确,utf8_general_ci速度比较快。通常情况下 utf8_general_ci的准确性就够我们用的了,在我看过很多程序源码后,发现它们大多数也用的是utf8_general_ci,所以新建数据 库时一般选用utf8_general_ci就可以了
如果是utf8mb4那么对应的就是 utf8mb4_general_ci utf8mb4_unicode_ci

总结

MySQL 的“utf8mb4”是真正的“UTF-8”。
MySQL 的“utf8”是一种“专属的编码”,它能够编码的 Unicode 字符并不多。
建议所有在使用“utf8”的 MySQL 和 MariaDB 用户都应该改用“utf8mb4”,永远都不要再使用“utf8”。不然很有可能出现编码的问题,而且这种问题定位比较困难。

Mysql utf8 和utf8mb4 的区别相关推荐

  1. mysql utf8 和 utf8mb4 的区别

    1. utf8 与 utf8mb4 异同 MySQL在 5.5.3 之后增加了 utf8mb4 字符编码,mb4即 most bytes 4.简单说 utf8mb4 是 utf8 的超集并完全兼容ut ...

  2. utf8和utf8mb4的区别详解

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

  3. mysql utf8转化utf8mb4

    mysql utf8转化utf8mb4 (字符集转化,批量更改为utf8mb4) SELECT CONCAT('ALTER TABLE ',TABLE_NAME,' CONVERT TO CHARAC ...

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

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

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

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

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

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

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

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

  8. mysql utf8跟utf8mb4_MySQL utf8 和 utf8mb4 的区别

    utf-8 时变化长度的编码,储存一个code point 需要1~4个字节. 然而,mysql的utf8只存储最多3个字节per code point. 所以,utf8字符集不能存储所有的unico ...

  9. utf8和utf8mb4的区别

    1. 基础知识 1.1 bit , byte , word 字     word 字节  byte (B) 位     bit (b) 1.2 单位换算 1字节 = 8位(1 byte = 8bit) ...

最新文章

  1. python3实现下载ftp上的文件
  2. Activiti 初步学习
  3. webpack3的CommonsChunkPlugin插件详解
  4. NLP复习资料(5)-第九章 句法分析
  5. 在微软5年,我学到的几个小技能
  6. 使用CAFFE训练自己的数据集并单张图片测试的方法
  7. 2021计算机视觉-包揽所有前沿论文源码 -上半年
  8. Web浏览器与Web服务器之间的通信过程
  9. 计算机cmd测试,电脑cmd命令怎么测试网速详细步骤
  10. 通过for循环生成简单的座位表
  11. 计算机网络(棋歌教学网站实验)
  12. CSS基础语法和盒模型
  13. 高端餐饮空间布局要点
  14. 吉林大学计算机学院学位预警,长春新区发布2021年学位预警!7所学校学位告急!...
  15. 九月总结:快速成长的一个月
  16. reverse 函数讲解
  17. 对ActiveX控件进行注册
  18. 2021.7 纪中快乐游记(上)
  19. Android自定义成长值、等级、积分进度条(带属性动画)
  20. ResNet50 网络结构搭建(PyTorch)

热门文章

  1. 在Windows Server 2008中安装Exchange Server 2007 SP1
  2. 闰年的判断方法_练习题079:如何判断某年为闰年
  3. android CTS test
  4. Java应用打包后运行需要注意编码问题
  5. mysql基本命令总结
  6. smarty课程---smarty的处理过程是怎样的
  7. Linux学习之基础命令
  8. 解决Oracle错误ORA-15061一例
  9. UWP Composition API - GroupListView(二)
  10. android studio打包aar心得