首页 > 数据库 >mysql 中 utf8、utf16、utf32、utf8mb3、utf8mb4的区别

mysql 中 utf8、utf16、utf32、utf8mb3、utf8mb4的区别

时间:2024-01-15 21:58:10浏览次数:25  
标签:utf8mb3 字符 编码 UTF 字节 utf8mb4 UTF8MB3 Unicode utf32

UTF-8 - “ 大小优化 ”:最适合基于拉丁字符的数据(或ASCII),每个字符只需1个字节,但大小相应增加符号种类(在最坏的情况下,每个字符最多可增加6个字节)
UTF-16 - “ 平衡 ”:每个字符至少需要2个字节,足以支持现有的主流语言集,并且具有固定的大小以便于字符处理(但是大小仍然可变,每个字符最多可以增加4个字节)
UTF-32 - “ 性能 ”:允许使用简单算法作为固定大小字符(4字节)的结果但存在内存缺点

 

UTF-8
没有字节顺序的概念
每个字符使用1到4个字节
ASCII是兼容的编码子集
完全自同步,例如来自流中任何地方的丢弃字节最多会损坏一个字符
几乎所有欧洲语言都以每个字符两个字节或更少的字节编码
UTF-16
必须使用已知的字节顺序进行解析或读取字节顺序标记(BOM)
每个字符使用2或4个字节
UTF-32
每个字符都是4个字节
必须使用已知的字节顺序进行解析或读取字节顺序标记(BOM)
除非大部分字符来自CJK(中文,日文和韩文)字符空间,否则UTF-8将是最节省空间的。

UTF-32最适合通过字符偏移随机访问字节数组。

UTF8mb3和UTF8mb4的区别
UTF-8是一种用于编码Unicode字符的可变长度字符编码标准。
MySQL中的“utf8”编码只支持最大3字节每字符,就是"utf8mb3"。真正的大家正在使用的UTF-8编码是应该能支持4字节每个字符。他们在2010年增加了一个变通的方法:一个新的字符集“utf8mb4”。
"utf8mb4"和"utf8mb3"则是UTF-8的两个变种。它们的主要区别在于能够表示的字符范围。

1. UTF-8 (Unicode)
最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。你可以想得到的是,全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。

因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。现代操作系统和大多数编程语言都直接支持Unicode。

2. UTF8mb3和UTF8mb4
MySQL数据库的 “utf8”并不是真正概念里的 UTF-8,原因上面是一点,还有一点是MySQL中的“utf8”编码只支持最大3字节每字符。真正的大家正在使用的UTF-8编码是应该能支持4字节每个字符。emoji需要4个字节,因此UTF8MB3无法存储emoji。

但其实MYSQL的开发者,并没有修饰这个bug,而是推出了新的字符集,就是UTF-8MB4字符编码。

3. UTF8MB3编码的优缺点
优点
UTF8MB3相对于UTF8MB4而言,存储一个字符所需的空间少一半,所以在存储大量数据时,UTF8MB3的存储更加节省空间。

缺点
UTF8MB3只能表示BMP平面内的字符,若出现超过此范围的字符,有可能无法正常存储或解析。
同时,UTF8MB3中的字符序列不能被直接用于JSON格式类型的数据,这点需特别注意。

 

 银柱网-李银柱个人博客 http://www.liyinzhu.com

标签:utf8mb3,字符,编码,UTF,字节,utf8mb4,UTF8MB3,Unicode,utf32
From: https://www.cnblogs.com/liyinzhu/p/17966446

相关文章

  • Illegal mix of collations (utf8mb4_0900_ai_ci,IMPLICIT) MySql字符集及校对规则不
    查询时报错--用于解决报错>1267-Illegalmixofcollations(utf8mb4_0900_ai_ci,IMPLICIT)and(utf8mb4_general_ci,IMPLICIT)foroperation'='这个错误是由于在进行比较操作时涉及到不同的字符集和校对规则(collations)。涉及到了utf8mb4_0900_ai_ci和utf8mb4_general......
  • 将MySQL默认字符集改为utf8mb4
    将MySQL默认字符集改为utf8mb4查看当前默认字符集mysql>SHOWVARIABLESWHEREVariable_nameLIKE'character\_set\_%'ORVariable_nameLIKE'collation%';进入mysql配置文件;设置字符集为utf8mb4[client]default-character-set=utf8mb4[mysql]default-character-set=......
  • MySQL字符集详解——utf8mb4 & utf8区别?
    字符集详解|JavaGuide(Java面试+学习指南)MySQL字符编码集中有两套UTF-8编码实现:utf8和**utf8mb4**。如果使用utf8的话,存储emoji符号和一些比较复杂的汉字、繁体字就会出错。何为字符集?字符是各种文字和符号的统称,包括各个国家文字、标点符号、表情、数字等等。......
  • Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,
    一、概述今天同事突然询问报错Illegalmixofcollations(utf8mb4_general_ci,IMPLICIT)and(utf8mb4_0900_ai_ci,IMPLICIT)foroperation'='分析:应该是连表查询,两张表的的匹配列编码格式不一致引起的二、问题复现1、创建两张小表createtabletest1(namevarchar(10)C......
  • 将MySQL默认字符集改为utf8mb4
    查看当前默认字符集mysql>SHOWVARIABLESWHEREVariable_nameLIKE'character\_set\_%'ORVariable_nameLIKE'collation%';进入mysql配置文件;设置字符集为utf8mb4[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb4[mysqld]......
  • 将MySQL默认字符集改为utf8mb4
    将MySQL默认字符集改为utf8mb4查看当前默认字符集mysql>SHOWVARIABLESWHEREVariable_nameLIKE'character\_set\_%'ORVariable_nameLIKE'collation%';进入mysql配置文件;设置字符集为utf8mb4[client]default-character-set=utf8mb4[mysql]default-character......
  • MySQL 巨坑:永远不要在 MySQL 中使用 UTF-8!!请使用utf8mb4
    https://mp.weixin.qq.com/s?__biz=MzU4NDc1NDMxMw==&mid=2247486462&idx=1&sn=7c490f075e3b7d704ae8415a6afd3c30&chksm=fd95be18cae2370e4001eada1c3e33efe6dd5fb8afd5024aa17d001f8609b2c4d821a03280c4&mpshare=1&scene=24&srcid=0731Pfqoe5Yw......
  • mysql 创建数据库 utf8mb3 utf8mb4
    mysql创建数据库utf8mb3utf8mb4在MySQL中,字符集是指字符的编码方式,决定了数据库中能够存储和处理的字符集合。MySQL支持多种字符集,其中包括UTF-8字符集,用于存储和处理全球各种语言的文本。在MySQL5.5.3之前,MySQL默认使用UTF-8字符集的变体utf8,该字符集最多只能存储3字节的UTF......
  • MySQL8.0中utf8mb4的强大:释放多语言数据的全部潜能
     在现代网络应用中,支持多种语言和字符集变得越来越重要。随着全球化的兴起,存储和处理多语言数据的需求已变得至关重要。MySQL作为最流行的关系数据库管理系统之一,它意识到了这一需求,并在其8.0版本中引入了utf8mb4,从而改变了游戏规则。在本文中,我们将通过实际示例探讨utf8mb4及其......
  • java 判断字符串内容是utf-8还是utf8mb4
    判断字符串内容是UTF-8还是UTF8MB4的方法概述在Java中,判断字符串内容是UTF-8还是UTF8MB4可以通过检查字符编码范围来实现。UTF-8使用1到4个字节表示一个字符,而UTF8MB4使用1到4个字节表示一个字符。下面将介绍整个流程和每一步需要做的事情。流程步骤描述1.将字符串转......