快速回顾 MySQL:字符集、校对顺序和安全管理

前提要述:参考书籍《MySQL必知必会》

17.1 字符集和校对顺序

我们有时候会乱码,主要原因就是字符集的编码设置,这是很多语言都遇到过的问题,数据库也是如此;而校对顺序就是:假如A和a的比较,取决于我们是否区分大小写,这就是需要设置校对顺序。

像我们创建表或数据库时,通常得指定字符集,不然就会给出一个默认的字符集。该默认的字符集在mysql安装目录中名为my.ini的文件中可以看到,也可以修改。下面是我在my.ini的配置:

[mysqld]
# port 3306   端口号
port=3306
# install path   安装路径
basedir=G:\\frame\\MYSQL\\mysql-5.7.24-winx64
# data path  存放数据的路径
datadir=G:\\frame\\MYSQL\\mysql-5.7.24-winx64\\mysqldata
# max_connections   最大连接数
max_connections=200
# max_connect_errors   连接错误5次就拒绝连接(防止黑客侵入数据丢失)
max_connect_errors=5
# charset   默认编码方式
character-set-server=utf8
# default-storage-engine   默认存储引擎
default-storage-engine=INNODB
# plugs  默认密码插件
default_authentication_plugin=mysql_native_password
[mysql]
default-character-set=utf8
[client]
port=3306
default-character-set=utf8

我都把字符集改成默认为utf8。

一些术语:

  • 字符集(Character Set)为字母和符号的集合;
  • 编码(Encoding)为某个字符集成员的内部表示;
  • 校对(也叫字符序)(Collation)为规定字符如何比较的指令。

17.1.1 使用字符集和校对顺序

MySQL支持众多的字符集。为查看所支持的字符集完整列表,使用以下语句:

SHOW CHARACTER SET;

可以看到所有可用的字符集以及每个字符集的描述和默认校对。

查看所支持的校对的完整列表:

SHOW COLLATION;

可以看到所有可用的校对,以及它们适用的字符集。有的字符集不止一种校对。


查看目前我们使用的字符集:

# 查看字符集
SHOW VARIABLES LIKE 'character%'';

下面解释显示的Variable_name:

  • character_set_client:客户端来源数据使用的字符集
  • character_set_connection:连接层字符集
  • character_set_database:当前选中数据库的默认字符集
  • character_set_results:查询结果字符集
  • character_set_server:默认的内部操作字符集
  • character_set_system:系统元数据(字段名等)字符集

为什么会有这么多种字符集?这涉及到转换:(参考别人,最下面有贴转载地址)

MySQL中的字符集转换过程

  1. MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection;

  2. 进行内部操作前将请求数据从character_set_connection转换为内部操作字符集,其确定方法如下:

    • 使用每个数据字段的CHARACTER SET设定值(character_set_system);
    • 若上述值不存在,则使用对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展,非SQL标准);
    • 若上述值不存在,则使用对应数据库的DEFAULTCHARACTER SET设定值(character_set_database);
    • 若上述值不存在,则使用character_set_server设定值。
  3. 将操作结果从内部操作字符集转换为character_set_results。

可以回忆一下,在创建数据库时我们需要指定字符集和校对顺序;在表中也有指定,不然就默认。这也可看出MySQL对于字符集提供了不同级别的设置,包括server级、database级、table级、column级。其中,中间两个级别就是刚才说的那两种。

而column级可用在表定义列时指定,我们也可以在SELECT语句中指定列的字符集和校对顺序࿱

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值