关于MySQL字符集知识梳理
# 字符集概念
# 查看字符集
SHOW CHARACTER SET;
SHOW CHARACTER SET like 'utf8%';
-- 查询排序集
SHOW COLLATION WHERE Charset = 'utf8mb4';
# 排序集后缀明明
| Suffix | Meaning |
|---|---|
_ai | Accent-insensitive 忽略重音 |
_as | Accent-sensitive 重音敏感 |
_ci | Case-insensitive 忽略大小写 |
_cs | Case-sensitive |
_ks | Kana-sensitive |
_bin | Binary |
# UTF-8 For Metadata
除了数据本身,其他用来描述数据库的数据都可以称作是Metadata,像是表名、数据库名、用户名、版本号、绝大多数的从 SHOW 命令返回的结果都是 Metadata。包括像是 INFORMATION_SCHEMA 表的数据内容也是,因为他们也是用来定义有关数据库对象的信息。
元数据必须满足以下条件:
- 所有的元数据必须是相同的字符集,不然使用
SHOW或者SELECT语句查询数据时将会报错,因为在同一列不同行中的数据必须是同一种字符集。 - 元数据必须包含所有字符集,要不然用户没办法使用自己的语言定义表名和数据库名字。
基于以上,为了安全考虑,Metadata 默认会设置为 utf8
# 查询系统字符集
SHOW VARIABLES LIKE 'character_set_system';
# 设置连接传输字符集
字符集的设置可以分为 4 个等级:server, database, table, column。
字符集的设置不仅影响数据存储,还影响跟客户端的数据传输,因此客户端如果要统一设置传输字符集,可以在建立连接时发送指令设置传输字符集。
设置客户端和 MySQL 服务端所有通信使用指定的字符集。
SET NAMES utf8mb4
-- 相当于这 3 个命令
SET character_set_client = utf8;
SET character_set_connection = utf8;
SET character_set_results = utf8;
上次更新: 2024/11/05, 03:15:29