Mysql字符集utf8和utf8mb4详解

 更新时间:2024年12月23日 09:37:49   作者:碎月如割  
文章介绍了MySQL中utf8和utf8mb4两种字符集的区别,包括编码方式、存储空间、索引长度以及支持的Unicode字符范围,同时,通过创建两个表并插入数据进行存储长度的比较,验证了上述理论

背景

1、MySQL在5.5.3版本之后增加了utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode;

2、utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了;

名词解释

  • 字符集(character set/charset):字符的二进制编码方式;
  • UTF-8:是unicode的实现方式之一,其他实现方式还有utf-16,utf-32,它是一种变长的编码,一个符号使用1~4个字节表示;
  • utf8:mysql中实现了utf-8编码的unicode字符集,是utf8mb3的别称,utf8编码中一个符号使用1~3个字节表示;
  • utf8mb4:mysql中实现了

关系

  • 1、都实现了utf-8编码中的的unicode字符集;
  • 2、utf8仅支持基本多语言平面Basic Multilingual Plane (BMP);
  • 3、utf8mb4支持BMP之外的补充字符,如一些生僻的汉字,emoji字符,以及任何新增的unicode字符。
  • 4、utf8一个字符最多使用3个字节存储,utf8mb4一个字符最多使用4个字节存储;
  • 5、对于BPM字符,utf8和utf8mb4都使用三个字节存储;对于非BMP字符,utf8mb4使用4个字节存储,utf8不能存储非BMP字符;
  • 6、InnoDB中默认最大可对767个字节建立索引;使用utf8的列最多可对255个字符建立索引;使用utf8mb4的最多可对191个字符建立索引;

实践

为了验证上面的理论,创建如下两个表:它们的字符集分别为utf8和utf8mb4

CREATE TABLE `test_utf8` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(5) NOT NULL COMMENT '名称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='测试utf8';

CREATE TABLE `test_utf8mb4` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(5) NOT NULL COMMENT '名称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测试utf8mb4';

向两个表中分别插入如下数据:

insert into test_utf8(name) values ('我是一颗小'), ('我是reo'), ('12345'), ('ggvdc');
insert into test_utf8mb4(name) values ('我是一颗小'), ('我是reo'), ('12345'), ('ggvdc');
insert into test_utf8mb4(name) values ('?????');

查看在两种字符集下的存储长度:

该图验证了上面3、4、5点理论;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Centos7下安装和配置MySQL5.7.20的详细教程

    Centos7下安装和配置MySQL5.7.20的详细教程

    这篇文章主要介绍了Linux(CentOS7)下安装和配置MySQL5.7.20详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价,需要的朋友可以参考下
    2020-05-05
  • 登录MySQL数据库最快几步(图文步骤详解)

    登录MySQL数据库最快几步(图文步骤详解)

    当 MySQL 服务开启后,就可以通过客户端来登录 MySQL 数据库了。在 Windows 操作系统下可以使用 DOS 命令登录数据库,本节将介绍使用命令方式登录 MySQL 数据库的方法
    2023-10-10
  • MySQL数据表的常见约束小结

    MySQL数据表的常见约束小结

    在数据库设计中,约束(Constraints)是用于确保数据的完整性、准确性和一致性的规则,MySQL 提供了多种约束类型,帮助我们规范数据存储,本文给大家介绍了MySQL数据表的常见约束,需要的朋友可以参考下
    2024-12-12
  • 详解MySql的慢查询分析及开启慢查询日志

    详解MySql的慢查询分析及开启慢查询日志

    本篇文章主要介绍了详解MySql的慢查询分析及开启慢查询日志,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • MySQL5.6的zip包安装教程详解

    MySQL5.6的zip包安装教程详解

    这篇文章主要介绍了MySQL5.6的zip包安装教程,需要的朋友可以参考下
    2018-11-11
  • CentOS7环境下MySQL8常用命令小结

    CentOS7环境下MySQL8常用命令小结

    在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,下面这篇文章主要给大家介绍了关于CentOS7环境下MySQL8常用命令的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • MySQL8 全文索引的实现方法

    MySQL8 全文索引的实现方法

    MySQL8支持全文索引和全文搜索,本文主要介绍了MySQL8全文索引的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • 不卸载原有mysql直接安装mysql8.0

    不卸载原有mysql直接安装mysql8.0

    本文主要介绍了不卸载原有mysql直接安装mysql8.0,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 将MySQL数据导出为sql文件的最佳实践

    将MySQL数据导出为sql文件的最佳实践

    这篇文章主要给大家介绍了如何将MySQL数据导出为sql文件,避免数据丢失的最佳实践,文中有详细的导出流程步骤,跟着文中的步骤就可以导出文件,需要的朋友可以借鉴参考
    2023-07-07
  • MySQL主键约束和外键约束详解

    MySQL主键约束和外键约束详解

    主键约束,说白了就是 not null + unique,主键也是在插入数据的时候先进行查询,而 MySQL 则会对 unique,primary key 这样的列自动的添加索引(后续介绍),来提高查询的效率,这篇文章主要介绍了MySQL主键约束和外键约束,需要的朋友可以参考下
    2023-03-03

最新评论