我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL 字符集和校验规则工作原理

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL 字符集和校验规则工作原理

MySQL 字符集和校验规则工作原理

字符编码相关参数

数据流中的转码过程

校验规则

Tips:字符集和校验规则总是相伴的

一 从简单的建库语句开始

CREATE DATABASE [IF NOT EXISTS] 
[[DEFAULT] CHARACTER SET ] 
[[DEFAULT] COLLATE ];

db_name : 数据库名 必填

db_charset:数据库的字符集 缺省为服务器字符集

db_collation:数据库的校验规则 缺省为服务器校对规则

二 字符集和字符编码是什么?

字符编码:将特定的字符与二进制码建立一一映射的集合就是字符集。每种字符集对应该种字符集的编码方式。

常见的字符集有 仅支持英文和特殊字符的ASCII、支持中英文的GBK、支持世界所有字符的Unicode等等

以ASCII字符集为例

它基于罗马字母表的编码方式,他不能表示中文仅仅包含了 全部的英文大小写和为数不多的特殊符号,每个字符一个字节低7位为编码位最高位保留,有些地方最高位做了扩充。增添了一些表格符号、运算符等。总而言之1个字节 8bit 表示一个字符,因为一一对应,所有一共有 27个字符。扩展字符集拥有28。

三 查看MySQL编码方式

show variables like "character%";
Variable_name Value 含义
character_set_client utf8mb4 # 客户端来源数据字符集
character_set_connection utf8mb4 # 链接层字符集
character_set_database utf8mb4 当前选中数据库默认字符集
character_set_filesystem binary 当前文件系统的编码格式
character_set_results utf8mb4 服务器返回的编码格式
character_set_server utf8mb4 服务器的默认编码格式
character_set_system utf8 数据库系统使用的编码格式
character_sets_dir /usr/local/mysql-8.0.15-macos10.14-x86_64/share/charsets/. 数据库字符集存放地址
  1. MySQL 一旦启动不需要再来关心 character_set_filesystem、character_set_system、character_sets_dir三个变量,因为他们并不会造成乱码的问题。系统文件存储方式不需要关心,字符集存放位置于性能和MySQL业务无关、数据库使用的编码格式是元数据的存储格式。理解MySQL编码转化原理不难理解。

  2. 建库时,若未明确指定字符集,则采用character_set_server指定的字符集。

    建表时,若未明确指定字符集,则采用当前库所采用的字符集。

    新增时记录,修改表字段时,若未明确指定字符集,则采用当前表所采用的字符集。

四 编码方式和校验规则在使用中的作用

1 连接的概念

一个连接:指的是连接服务器时所作的事情。 ——《MySQL手册》

例如:客户端发送SQL语句,例如查询,通过连接发送到服务器。服务器通过连接发送响应给客户端,例如结果集。

2 一个提交的分解

  1. 客户端发起 查询

  2. 服务器使用character_set_client变量作为客户端发送的查询中使用的字符集。

  3. 服务器拿到 查询 后用将character_set_client 编码方式转为 character_set_connection对应的校验规则为collation_connection, (如果查询是文字字符串,也就是他们有某种字符格式的引介词 例如_utf8,如果是列值,校验规则将不依靠collation_connection)

  4. 服务器执行查询的结果 将会 按照 character_set_results 编码方式返回查询结果到客户端。包括结果数据,例如列值和结果元数据(如列名)。

  5. 关于:字符串对3的注解:**[_charset_name] "String" [COLLATE collation_name] **

    1. [_charset_name]字符编码 也就是引介词,表示接下来的字符串的编码方式。
    2. [COLLATE collation_name]表示该字符串的校验匹配方式
    3. 来自官方文档对引介词的解释:_charset_name表达式正式称做一个引介词。它告诉解析程序,“后面将要出现的字符串使用字符集X。”因为以前人们对此感到困惑,我们强调引介词不导致任何转换; 它仅是一个符号,不改变字符串的值。引介词在标准十六进制字母和数字十六进制符号(x"literal"和 0xnnnn)中是合法的,以及?(当在一个编程语言接口中使用预处理的语句时进行参数替换)。

3 更新和查询转码过程

数据更新转码过程:character_set_client-->character_set_connection-->表字符集。

数据查询转码过程:表字符集-->character_set_result

4 字符串的引介词和校验规则的确定

引介词:_charset_name表达式正式称做一个引介词。它告诉解析程序,“后面将要出现的字符串使用字符集X。”因为以前人们对此感到困惑,我们强调引介词不导致任何转换; 它仅是一个符号,不改变字符串的值。引介词在标准十六进制字母和数字十六进制符号(x"literal"和 0xnnnn)中是合法的,以及?(当在一个编程语言接口中使用预处理的语句时进行参数替换)。

  • 如果指定了CHARACTER SET X和COLLATE Y,那么使用CHARACTER SET X和COLLATE Y。

  • 如果指定了CHARACTER SET X而没有指定COLLATE Y,那么使用CHARACTER SET X和CHARACTER SET X的默认校对规则。

  • 否则,使用通过character_set_connection 和 collation_connection系统变量给出的字符集和 校对规则。

Tips:COLLATE子句,能够为一个查询覆盖任何默认校对规则。MySQL手册

5 关于校验规则

  1. 每个字符集都有默认的校验规则
  2. 两个不同的字符集不能有一致的校验规则
  3. 存在校对规则命名约定:以其相关的字符集名开始,中间包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元)结束。

常见操作

查看现在支持的所有编码方式

show character set;

查看支持的所有检验规则

show collation;

查看字符编码设置

show variables like "character%";

查看当前字符集和校对规则设置

show variables like "collation_%";

设置编码字符集

set names "utf8";

修改数据库字符集

alter database database_name character set xxx;

修改表的字符集

  1. 只修改表的字符集,影响后续该表新增列的默认定义,已有列的字符集不受影响。
alter table table_name character set xxx;
  1. 同时修改表字符集和已有列字符集,并将已有数据进行字符集编码转换。
alter table table_name convert to character set xxx;

修改列 字符集

alter table table_name modify col_name varchar(col_length) character set xxx;

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL 字符集和校验规则工作原理

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL 字符集和校验规则工作原理

字符编码相关参数数据流中的转码过程校验规则Tips:字符集和校验规则总是相伴的一 从简单的建库语句开始CREATE DATABASE [IF NOT EXISTS] [[DEFAULT] CHARACTER SET ] [[DEFAULT] COLLATE ]
MySQL 字符集和校验规则工作原理
2016-08-01

MySQL 字符集及校验规则

字符集Mysql 的字符集有4个级别的默认设置:服务器级,数据库级,表级和字段级,客户端交互时,也可以指定字符集# 字符集:是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等最早的字符集:ASCII码中国
MySQL 字符集及校验规则
2018-04-22

详解mysql中的字符集和校验规则

1几种常见字符集 在MySQL中,最常见的字符集有ASCII字符集、latin字符集、GB2312字符集、GBK字符集、UTF8字符集等,下面我们简单介绍下这些字符集: ASCII字符集 这个字符集使用1个字节进行编码,一
2022-05-21

MySQL原理 - 字符集与排序规则

任何计算机存储数据,都需要字符集,因为计算机存储的数据其实都是二进制编码,将一个个字符,映射到对应的二进制编码的这个映射就是字符编码(字符集)。这些字符如何排序呢?决定字符排序的规则就是排序规则。查看内置字符集与比较规则通过show charset;命令,可以
MySQL原理 - 字符集与排序规则
2021-04-11

MySQL字符集与校对规则怎么应用

MySQL字符集和校对规则是用来确定字符串数据的存储方式和比较规则的设置。在MySQL中,可以在数据库、表、列级别设置字符集和校对规则。数据库级别设置字符集和校对规则:可以在创建数据库时指定字符集和校对规则,例如:CREATE DATAB
MySQL字符集与校对规则怎么应用
2024-04-09

MySQL中字符集与校对规则的选择与优化

在MySQL中,字符集和校对规则是影响数据库性能和数据一致性的重要因素。选择合适的字符集和校对规则可以提高数据的存储效率、查询效率和一致性。以下是关于如何在MySQL中选择和优化字符集与校对规则的建议:选择合适的字符集:根据应用程序的需求选
MySQL中字符集与校对规则的选择与优化
2024-10-21

mysql字符集和排序规则是什么

MySQL字符集和排序规则是用于定义数据库中字符串数据存储和比较的规则。字符集(Character Set)指的是一组字符的集合,包括了字母、数字、标点符号、空格等字符。MySQL支持多种字符集,常见的字符集有UTF-8、GBK、Latin
2023-08-25

MySQL字符集和排序规则详解(推荐)

目录前言简介字符集(Character Set):排序规则(Collation):字符集排序规则常见的排序规则选择排序规则的考虑因素:实践新建表测试数据写入排序规则 不区分大小写 数据测试排序规则 区分大小写 数据测试总结前言mysql中
MySQL字符集和排序规则详解(推荐)
2024-08-29

mysql怎么查看字符集和排序规则

在MySQL中,可以使用以下命令来查看字符集和排序规则:查看当前数据库的字符集和排序规则:SHOW VARIABLES LIKE 'collation%';查看MySQL服务器的字符集和排序规则:SHOW VARIABL
mysql怎么查看字符集和排序规则
2024-04-09

Mysql建库字符集和排序规则及说明

目录概述排序规则字符集的选择排序规则1. utf8mb4_bin2. utf8mb4_unicode_ci 和 utf8mb4_general_ci总结概述我们在使用mysql的时候,尤其是在创建数据库的时候,我们需要选择当前数据库的字符
2022-12-09

一文带你了解MySQL字符集和比较规则

目录1. mysql中的utf8和utf8mb42. MySQL中的比较规则3. 各级别的字符集和比较规则3.1 服务器级别3.2 数据库级别3.3 表级别3.4 列级别4. 修改字符集或比较规则5. MySQL中的字符集转换过程总结 1.
2022-12-29

MySQL内部字符集转换的工作原理是什么

MySQL内部字符集转换的工作原理主要涉及以下几个方面:MySQL服务器首先会根据连接的客户端的字符集设置来决定如何处理传入的字符数据。客户端和服务器之间的通信是通过字符集进行编码和解码的。当从客户端传入的字符数据需要存储到数据库中时,My
MySQL内部字符集转换的工作原理是什么
2024-04-09

MySQL建立数据库时字符集和排序规则的选择

文章目录 前言一、字符集?二、Mysql中的字符集1.Unicode与UTF8、UTF8MB4、UTF16、UTF32关系2.Mysql新建数据库时选择哪种字符集呢? 三、Mysql排序规则四、Mysql查询字符集和排序规则常
2023-08-20

编程热搜

目录