洗料系列-数据库专题-MySQL中的字符集和比较规则

服务端的字符集和比较规则

MySQL的字符集分为服务器级别、数据库级别、表级别和列级别。

服务器级别

服务器级别的字符集和比较规则对应的系统变量及其描述
系统变量描述类型默认值
character_set_server服务器级别的字符集动态变量utf8
collation_server服务器级别的比较规则动态变量utf8_general_ci

数据库级别

创建和修改数据库可以指定数据库级别的字符集和比较规则

create database 数据库名
    [[default] character set 字符集名称]
    [[default] collation 比较规则名称];

alter database 数据库名
    [[default] character set 字符集名称]
    [[default] collation 比较规则名称];
数据库级别的字符集和比较规则对应的系统变量及描述
系统变量描述
character_set_database当前数据库的字符集
collation_database当前数据库的比较规则
> use db0;
> show variables like 'character_set_database';
> show variables like 'collation_database';

表级别

创建和修改表的时候可以指定表的字符集和比较规则

create table 表名(列信息)
[[default] character set 字符集名称]
[[default] collation 比较规则名称];

alter table 表名
[[default] character set 字符集名称]
[[default] collation 比较规则名称];

列级别

对于存储字符串的列,同一个表的不同列也可以有不同的字符集和比较规则;创建和修改列的时候可以指定列的字符集和比较规则

create table 表名(
    列名 字符串类型 [character set 字符集名称] [collation 比较规则],
    其他列...
);

alter table 表名 modify 列名 字符串类型 [character set 字符集名称] [collation 比较规则];

字符集和比较规则的关联

字符集和比较规则之间相互关联

修改操作自动关联逻辑
只修改字符集比较规则将修改为修改后字符集默认的比较规则
只修改比较规则字符集将修改为修改后的比较规则对应的字符集

查看数据库支持的字符集和比较规则

show character set;
show collation;

各级别的字符集和比较规则优先级

列 → 表 → 库 → 服务器

没有显式指定字符集和比较规则则按照该优先级逐层确认字符集和比较规则

客户端链接使用的字符集

三个session级别的系统变量及其作用

系统变量描述
character_set_client服务器认为请求是按照系统变量指定的字符集进行编码
character_set_connection服务器在处理请求时,会把请求字节序列从character_set_client转换为character_set_connection
character_set_results服务器采用该系统变量指定的字符集对返回给客户端的字符串进行编码

一些关键流程

  1. 客户端发送的请求字节序列采用character_set_client系统变量对应的字符集进行编码
  2. 服务器收到请求字节序列才采用character_set_connection系统变量对应的字符集进行编码
  3. 服务器在运行过程中会吧请求字节序列转换为服务器对应的级别的字符集
  4. 服务器在向客户端返回字节序列时,使用character_set_results系统变量对应的字符集进行编码
  5. 客户端在收到响应字节序列后采用character_set_client系统变量对应的字符集进行编码
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐毓俊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值