数据库原理与应用 第 4 章 · 第三节
课程 › 第 4 章 › 第三节 四个级别校对规则的级别乱码 版式
第 4 章 数据库的创建和管理 · 第三节

字符集的级别与乱码

四个级别怎样逐级继承,乱码是怎样产生的
本 节 知 识 点
  1. 10字符集的四个级别
  2. 11各个级别的校对规则
  3. 12乱码的表现和原因
10
第 4 章 · 第三节 · 课件第 20、21 页合并重做

字符集的四个级别

服务器、数据库、数据表、连接,四个级别都可以设置。

4.2 MySQL 数据库的字符集课件第 20、21 页合并

字符集的四个级别

MySQL 对字符集的设置分为四个级别:服务器(Server)、数据库(Database)、数据表(Table)和连接(Connection)。
级别控制范围作用
服务器整个 MySQL 服务器新建数据库时默认使用的字符集
数据库某一个数据库在库中新建表时默认使用的字符集
数据表某一张表表中的数据用什么编码存储
连接客户端与服务器之间的连接客户端发送和接收数据用什么编码
查看各个级别的字符集
SHOW VARIABLES LIKE 'character%';
变量含义
character_set_server服务器级的字符集
character_set_database当前数据库的字符集
character_set_client客户端发来的语句用的字符集
character_set_connection连接用的字符集
character_set_results返回给客户端的结果用的字符集

重 点

没有指定时,下一级继承上一级的设置:表继承数据库,数据库继承服务器。

实 验

实验 1-6 各级别的设置

11
第 4 章 · 第三节 · 课件第 22 页重做

各个级别的校对规则

校对规则也分级别,用 collation 开头的变量查看。

4.2 MySQL 数据库的字符集课件第 22 页重做

各个级别的校对规则

只查看某一个级别
SHOW VARIABLES
LIKE 'character_set_server';
查看各个级别的校对规则
SHOW VARIABLES
LIKE 'collation%';
三个校对规则变量
变量含义
collation_server服务器级的校对规则
collation_database当前数据库的校对规则
collation_connection连接的校对规则
12
第 4 章 · 第三节 · 课件第 23、24 页合并重做

乱码的表现和原因

编码不一致是出现乱码的主要原因。

4.2 MySQL 数据库的字符集课件第 23、24 页合并

乱码的表现和原因

两种表现
  • 录入的是正常的数据,存进数据库以后变成了乱码
  • 数据库中存的是正常的数据,读出来以后变成了乱码
从数据的流向看原因
环节原因
输入端录入数据用的编码与数据库存储的编码不同,转换时出错
网络网络中断,传输不完整,服务器又没有校验,存进了不完整的数据
存储端服务器或数据库没有设置编码,用了 latin1 等不支持中文的编码
避免乱码的办法:服务器、数据库、数据表和连接都使用同一种字符集,推荐使用 utf8mb4。

练一练

数据库用 utf8mb4 存储,客户端却按 gbk 发送汉字,最可能在哪一个环节出错?
  1. A输入端
  2. B网络
  3. C存储端
答案 A

客户端发送数据用的编码与数据库存储的编码不一致,转换时出错,属于输入端的问题。

保山学院·人工智能教研室·曹鼎鼎