目录

关于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