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点理论;

总结

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

相关文章

  • MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引详细介绍

    MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引详细介绍

    本文主要介绍了MySQL的索引类型,根据索引的存储方式来划分,索引可以分为聚簇索引和非聚簇索引。聚簇索引的特点是叶子节点包含了完整的记录行,而非聚簇索引的叶子节点只有所以字段和主键ID,感兴趣的同学可以阅读本文
    2023-04-04
  • MySQL找出未提交事务的SQL实例浅析

    MySQL找出未提交事务的SQL实例浅析

    这篇文章主要给大家介绍了关于MySQL找出未提交事务SQL的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Mysql多表操作方法讲解教程

    Mysql多表操作方法讲解教程

    这篇文章主要介绍了MySQL数据库的多表操作,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-12-12
  • MySQL 用 limit 为什么会影响性能

    MySQL 用 limit 为什么会影响性能

    对于小的偏移量,直接使用limit来查询没有什么问题,但随着数据量的增大,越往后分页,limit语句的偏移量就会越大,速度也会明显变慢,接下来文章就向大家介绍其的原由,感兴趣的小伙伴可参考下面文章具体内容
    2021-09-09
  • MYSQL必知必会读书笔记 第一章(基础)

    MYSQL必知必会读书笔记 第一章(基础)

    数据库(database)是一个以某种有组织的方式存储的数据集合。本文是小编日常收集整理些有关mysql的知识,非常具有参考价值,感兴趣的朋友一起学习吧
    2016-05-05
  • ADODB 入门

    ADODB 入门

    ADODB 入门...
    2006-12-12
  • MySQL一个语句查出各种整形占用字节数及最大最小值的实例

    MySQL一个语句查出各种整形占用字节数及最大最小值的实例

    下面小编就为大家带来一篇MySQL一个语句查出各种整形占用字节数及最大最小值的实例。
    2017-03-03
  • MySQL9.1.0实现最基础主从复制的步骤

    MySQL9.1.0实现最基础主从复制的步骤

    本文主要介绍了使用Docker实现MySQL的主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • Mysql中存储UUID去除横线的方法

    Mysql中存储UUID去除横线的方法

    这篇文章主要介绍了Mysql中存储UUID去除横线的方法,本文给出了3个Mysql函数实现去除去UUID中的横线,需要的朋友可以参考下
    2015-02-02
  • mysql数据库表增添字段,删除字段,修改字段的排列等操作

    mysql数据库表增添字段,删除字段,修改字段的排列等操作

    这篇文章主要介绍了mysql数据库表增添字段,删除字段,修改字段的排列等操作,修改表指的是修改数据库之后中已经存在的数据表的结构
    2022-07-07

最新评论