MySQL中utf8和utf8mb4编码有什么区别?-mysql教程-学派吧

本篇文章给大家带来的内容是关于MySQL中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 字符等等。

三、问题根源

最初的 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。

以上就是MySQL中utf8和utf8mb4编码有什么区别?的详细内容,更多请关注php中文网其它相关文章!

主题测试文章,只做测试使用。发布者:云大使,转转请注明出处:https://www.xp8.net/data/3459.html

赞 (0)
打赏 微信扫一扫 微信扫一扫
上一篇 2019年4月9日 下午8:57
什么是T-SQL?-mysql教程-学派吧
下一篇 2019年4月9日 下午8:57

相关推荐

  • 在linux系统下启动 mysql数据库使用教程-学派吧

    本文主要讲述了在在linux系统下启动 mysql数据库操作,感兴趣的朋友可以了解一下。 {mysql}表示mysql的安装目录如何启动/停止/重启MySQL一、启动方式1、使用 service 启动:service mysqld start2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start如果/etc/inint.d/下找…

    数据库运维 2019年4月24日
    4.2K00
  • MySQL执行过程以及查询缓存的详细介绍-mysql教程-学派吧

    本篇文章给大家带来的内容是关于MySQL执行过程以及查询缓存的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 MySQL执行一个查询过程:当我们向MySQL发送一个请求的时候,MySQL到底做了什么: 1.客户端发送一条查询给服务器2.服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段。3.服务器端…

    2019年4月9日
    2.2K00
  • Linux下MySQL无法访问问题排查的基本步骤-linux教程

    问题说明 本文说明云服务器 ECS Linux 上 MySQL 无法访问问题的一般排查步骤。 处理办法 查看 Linux 操作系统是否已经安装了 MySQL $ rpm -qa mysql mysql-4.1.7-4.RHEL4.1 # 说明已经安装了 MySQL 检查状态 检测 MySQL 运行状态: service mysqld status 启动服务:…

    数据库运维 2019年1月1日
    2.7K00
  • 如何在Mac上安装MySQL?-mysql教程-学派吧

    Oracle的MySQL是一个流行的基于结构化查询语言(SQL)的开源关系数据库管理系统。它经常与PHP一起使用,以增强网站的功能。PHP预装在Mac电脑上,而MySQL没有。 当您创建和测试需要MySQL数据库的软件或网站时,在您的计算机上安装MySQL非常方便。在Mac上安装MySQL比您预期的要容易,特别是如果您使用本机安装包而不是TAR包,这需要在终…

    数据库运维 2019年4月9日
    2.3K00
  • 腾讯云DTS云数据库跨账号实例间迁移

    操作场景 云数据库跨账号实例间数据迁移,资源库和目标库都属于腾讯云数据库实例,但所属不同的主账号名下,这种数据库实例之间的数据迁移。本章节介绍通过 DTS 数据迁移功能实现从其他账号腾讯云数据库实例迁移数据至本账号下云数据库实例。 说明: 不支持通过云数据库跨账号的方式,进行中国站和国际站之间的云数据库迁移,如有相关诉求,请通过公网方式。 支持范围 源数据库…

    2026年1月5日
    57400

发表回复

登录后才能评论
联系我们

联系我们

18838889666

在线咨询: QQ交谈

邮件:xinyun@88.com

工作时间:周一至周五,9:30-18:30,节假日休息

添加微信
添加微信
分享本页
返回顶部