字符集详解
# 字符集详解
MySQL 字符编码集中有两套 UTF-8 编码实现:
utf8
和utf8mb4
。如果使用
utf8
的话,存储 emoji 符号和一些比较复杂的汉字、繁体字就会出错。
utf8
:utf8
编码只支持1-3
个字节 。 在utf8
编码中,中文是占 3 个字节,其他数字、英文、符号占一个字节。但 emoji 符号占 4 个字节,一些较复杂的文字、繁体字也是 4 个字节。utf8mb4
:UTF-8 的完整实现,正版!最多支持使用 4 个字节表示字符,因此,可以用来存储 emoji 符号。
# 什么是字符集?
字符是各种文字和符号的统称,包括各个国家文字、标点符号、表情、数字等等。
字符集 就是一系列字符的集合(编码规则)。
每个字符在字符集中都有一个唯一的编码,计算机根据这个编码来识别和处理字符。不同的字符集支持不同的字符范围和编码方式。
- 字符 转换成 二进制数据的过程称为 字符编码
- 二进制数据 解析成 字符的过程称为 字符解码
# 常见的字符集
# ASCII 码
ASCII(American Standard Code for Information Interchange)是最早的字符集之一,它使用 7 位二进制数表示 128 个字符,包括英文字母、数字、标点符号和控制字符等。ASCII 码是计算机系统最基本的字符集之一,它为文本数据提供了最基本的编码方式。
# Unicode
随着计算机技术的发展,对于国际化和多语言支持的需求不断增加,ASCII 码已经不能满足各种语言字符的表示需求。于是,Unicode 字符集应运而生。Unicode 采用更多的位数来表示字符,常见的有 16 位的 UCS-2 和 32 位的 UCS-4。
# UTF-8
UTF-8(Unicode Transformation Format-8)是一种对 Unicode 进行编码的变长字符集,它可以使用 1 到 4 个字节表示一个字符,根据字符的不同范围自动选择合适的编码长度。UTF-8 是目前互联网上广泛使用的字符集之一,它既能表示 ASCII 字符,又能表示任意国家和地区的字符。
# GBK 和 GB2312
GBK 和 GB2312 是中文字符集,用于表示中文字符。GBK 扩展了 GB2312 字符集,支持更多的中文字符,包括繁体字和生僻字。GBK 和 GB2312在中国大陆广泛使用,是中文文本处理的基本字符集。
# BIG5
BIG5 主要针对的是繁体中文,收录了 13000 多个汉字。
# ANSI
ANSI(American National Standards Institute)是一种字符集标准的通用名称,它实际上不是一个具体的字符集,而是指各种不同的字符集标准。在不同的操作系统和编程环境中,ANSI 可能对应不同的字符集,因此在使用 ANSI 字符集时需要注意平台的兼容性。
# 在线编码和解码
utf-8转utf-8、Unicode (UTF-8)转Unicode (UTF-8)、utf-8转utf-8编码 (haomeili.net) (opens new window)
# MySQL 字符集
# 查看支持的字符集
可以通过 SHOW CHARSET
命令来查看
# 默认字符集
在 MySQL5.7 中,默认字符集是 latin1
;在 MySQL8.0 中,默认字符集是 utf8mb4
# 字符集的层次级别
server
(MySQL 实例级别)database
(库级别)table
(表级别)column
(字段级别)
优先级从上往下依次增大
# 5.x 版本和 8.x 版本都兼容的字符集与排序规则⭐️
字符集:utf8mb4
排序规则:utf8mb4_general_ci
解析
- 字符集:utf8mb4 是 MySQL 5.x 和 8.x 版本都兼容的字符集。它是支持四字节的 UTF-8 编码,可以用于存储包含 Emoji 表情等特殊字符的文本数据。
- 排序规则:
- 在 MySQL 5.x 版本中,默认的排序规则是 utf8mb4_general_ci,
- 而在 MySQL 8.x 版本中,默认的排序规则是 utf8mb4_0900_ai_ci。
- 这是因为 MySQL 8.x 引入了新的排序规则算法 utf8mb4_0900_ai_ci,它在一些情况下(例如对特殊字符的排序)表现更为准确和符合语言习惯。
所以,**如果希望在 MySQL 5.x 和 8.x 版本中都兼容,并且不需要新的排序规则算法,可以使用 utf8mb4 字符集和 utf8mb4_general_ci 排序规则。**但如果需要更准确的排序和对特殊字符的支持,可以考虑使用 utf8mb4 字符集和 utf8mb4_0900_ai_ci 排序规则。