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

字符集的四个级别与乱码

四级怎样一路继承下来,乱码到底是在哪一步出的
本 节 知 识 点
  1. 20MySQL 字符集的设置级别
  2. 21为什么要分四个级别
  3. 22各级别的校对规则
  4. 23MySQL 乱码的两种表现
  5. 24乱码的三个来源
20
第 4 章 · 第三节

MySQL 字符集的设置级别

字符集能在四个层次上设,从服务器一路管到列。

第 20 页课件

试一试哪一级写了就听谁的

怎么设
服务器
数据库
数据表
哪一级写了就听哪一级的,没写就照抄上一级。

记牢它四级

  1. 服务器 Server
  2. 数据库 Database
  3. 数据表 Table
  4. 连接 Connection

重 点

前三级层层继承,下面不写就照抄上面。连接级由客户端自己说了算。

21
第 4 章 · 第三节

为什么要分四个级别

分级是为了让不同范围的数据各用各的编码。

第 21 页课件

打个比方

学校定校服,学院可以自己改,班级还能再改,谁都不写就穿学校那套。

重 点

客户端、连接、结果三处常是 gbk,服务器是 utf8mb4,乱码就从这里来。

上机做

上机第 5 题 把四个级别一次看全

想一想

存进去是好的,读出来是乱的,问题出在哪一级?

22
第 4 章 · 第三节

各级别的校对规则

校对规则也分四级,查法和字符集一模一样。

第 22 页课件

分清楚

查什么命令怎么写
各级字符集变量名以 character 开头
各级校对规则换成 collation 开头

练一练

要看各级校对规则的默认设置,应该敲哪一条?
  1. ASHOW VARIABLES LIKE 'character%'
  2. BSHOW VARIABLES LIKE 'collation%'
  3. CSHOW COLLATION
  4. DSHOW CREATE DATABASE
答案 B

把 character 换成 collation,其余写法一个字不变。

想一想

连接级用 gbk,服务器用 utf8mb4,会出事吗?

23
第 4 章 · 第三节

MySQL 乱码的两种表现

乱码分两种:存进去就坏了,和读出来才坏。

第 23 页课件

分清楚

现象说明什么
录入正常,存完是乱码写的时候编码就错了
存的是好数据,读出来乱读的时候编码对不上

打个比方

前一种是抄错了字,后一种是字没抄错、你拿错了字典。

想一想

你遇到过打开文件满屏方块的情况吗?

24
第 4 章 · 第三节

乱码的三个来源

顺着数据流走一遍,乱码只可能出在三处。

第 24 页课件

试一试看六个字节怎么变样

情况
程序往库里写两个字:你好
环节这一步是什么
程序发出去你好
路上的字节E4 BD A0 E5 A5 BD
读回来看到你好
同样六个字节,两头对编码的理解一错,字就面目全非。

记牢它三处

  1. 录入端编码不一致
  2. 网络传输丢字节
  3. 库没设默认编码

练一练

网页上显示正常,存进库变成问号,最可能是哪里出了问题?
  1. A网速太慢
  2. B库的字符集存不下这些字
  3. C显卡驱动
  4. DMySQL 版本太新
答案 B

字存不下才会变问号,多半是库还在用 latin1 或者 utf8。

重 点

建库时把字符集写清楚,能挡掉绝大多数乱码。

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