11、MySQL字符集和校对规则详解
在讲解字符集和校对规则之前,我们先来简单了解一下字符、字符集和字符编码。
字符(Character)是计算机中字母、数字、符号的统称,一个字符可以是一个中文汉字、一个英文字母、一个阿拉伯数字、一个标点符号等。
计算机是以二进制的形式来存储数据的。平时我们在显示器上看到的数字、英文、标点符号、汉字等字符都是二进制数转换之后的结果。
字符集(Character set)定义了字符和二进制的对应关系,为字符分配了唯一的编号。常见的字符集有 ASCII、GBK、IOS-8859-1 等。
字符编码(Character encoding)也可以称为字集码,规定了如何将字符的编号存储到计算机中。
大部分字符集都只对应一种字符编码,例如:ASCII、IOS-8859-1、GB2312、GBK,都是既表示了字符集又表示了对应的字符编码。所以一般情况下,可以将两者视为同义词。Unicode 字符集除外,Unicode 有三种编码方案,即 UTF-8、UTF-16 和 UTF-32。最为常用的是 UTF-8 编码。
校对规则(Collation)也可以称为排序规则,是指在同一个字符集内字符之间的比较规则。字符集和校对规则是一对多的关系,每个字符集都有一个默认的校对规则。字符集和校对规则相辅相成,相互依赖关联。
简单来说,字符集用来定义 MySQL 存储字符串的方式,校对规则用来定义 MySQL 比较字符串的方式。
- ASCII编码,将英文存储到计算机
- GB2312编码和GBK编码,将中文存储到计算机
- Unicode字符集,将全世界的文字存储到计算机
有些数据库并没有清晰的区分开字符集和校对规则。例如,在 SQL Server 中创建数据库时,选择字符集就相当于选定了字符集和校对规则。
而在 MySQL 中,字符集和校对规则是区分开的,必须设置字符集和校对规则。一般情况下,没有特殊需求,只设置其一即可。只设置字符集时,MySQL 会将校对规则设置为字符集中对应的默认校对规则。
可以通过SHOW VARIABLES LIKE 'character%';
命令查看当前 MySQL 使用的字符集,命令和运行结果如下:
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set, 1 warning (0.01 sec)
上述运行结果说明如下表所示:
- character_set_client -----MySQL 客户端使用的字符集
- character_set_connection----- 连接数据库时使用的字符集
- character_set_database----- 创建数据库使用的字符集
- character_set_filesystem----- MySQL 服务器文件系统使用的字符集,默认值为 binary,不做任何转换
- character_set_results----- 数据库给客户端返回数据时使用的字符集
- character_set_server----- MySQL 服务器使用的字符集,建议由系统自己管理,不要人为定义
- character_set_system -----数据库系统使用的字符集,默认值为 utf8,不需要设置
- character_sets_dir----- 字符集的安装目录
乱码时,不需要关心 character_set_filesystem
、character_set_system
和 character_sets_dir
这 3 个系统变量,它们不会影响乱码 。
可以通过SHOW VARIABLES LIKE 'collation\_%';
命令查看当前 MySQL 使用的校对规则,命令和运行结果如下:
mysql> SHOW VARIABLES LIKE 'collation\_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | gbk_chinese_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set, 1 warning (0.01 sec)
对上述运行结果说明如下:
- collation_connection:连接数据库时使用的校对规则
- collation_database:创建数据库时使用的校对规则
- collation_server:MySQL 服务器使用的校对规则
校对规则命令约定如下:
- 以校对规则所对应的字符集名开头
- 以国家名居中(或以 general 居中)
- 以 ci、cs 或 bin 结尾,ci 表示大小写不敏感,cs 表示大小写敏感,bin 表示按二进制编码值比较。
MySQL字符集的转换过程
MySQL 中字符集的转换过程如下:
1)在命令提示符窗口(cmd 命令行)中执行 MySQL 命令或 sql 语句时,这些命令或语句从“命令提示符窗口字符集”转换为“character_set_client”定义的字符集。
2)使用命令提示符窗口成功连接 MySQL 服务器后,就建立了一条“数据通信链路”,MySQL 命令或 sql 语句沿着“数据链路”传向 MySQL 服务器,由 character_set_client 定义的字符集转换为 character_set_connection 定义的字符集。
3)MySQL 服务实例收到数据通信链路中的 MySQL 命令或 sql 语句后,将 MySQL 命令或 sql 语句从 character_set_connection 定义的字符集转换为 character_set_server 定义的字符集。
4)若 MySQL 命令或 sql 语句针对于某个数据库进行操作,此时将 MySQL 命令或 sql 语句从 character_set_server 定义的字符集转换为 character_set_database 定义的字符集。
5)MySQL 命令或 sql 语句执行结束后,将执行结果设置为 character_set_results 定义的字符集。
6)执行结果沿着打开的数据通信链路原路返回,将执行结果从 character_set_results 定义的字符集转换为 character_set_client 定义的字符集,最终转换为命令提示符窗口字符集,显示到命令提示符窗口中。
11、MySQL字符集和校对规则详解相关推荐
- MySQL数据库——MySQL字符集和校对规则详解
在讲解字符集和校对规则之前,我们先来简单了解一下字符.字符集和字符编码. 字符(Character)是计算机中字母.数字.符号的统称,一个字符可以是一个中文汉字.一个英文字母.一个阿拉伯数字.一个标点 ...
- mysql干货——数据库字符集和校对规则详解
2019独角兽企业重金招聘Python工程师标准>>> 一.什么是字符集 字符是多个文字和符号的总称,包括各个国家的文字.标点符号.图形符号.数字等.字符集多个字符的集合. 字符集合 ...
- MySQL字符集和排序规则详解
本篇博客主要记录mysql当中关于创建数据库时候选择:字符集.排序规则等相关知识.通过示例直观的看出其真正作用. 目录 1.前言 2.mysql字符集 2.排序规则 2.1.排序规则作用 2.2.排序 ...
- MySQL字符集和校对规则(Collation)
MySQL字符集和校对规则(Collation) 阅读目录:MySQL的字符集和校对规则 MySQL的字符集 MySQL与字符集 正确使用字符集 MySQL客户端与字符集 字符集编码转换原理 字符集常 ...
- mysql字符集和校对规则
字符集的概念大家都清楚,校对规则很多人不了解,一般数据库开发中也用不到这个概念,mysql在这方便貌似很先进,大概介绍一下. 简要说明 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用 ...
- mysql 字符集和校对规则
为什么80%的码农都做不了架构师?>>> 1,常规字符集及校对 假设我们有一个字母表使用了四个字母:'A'.'B'.'a'.'b'.我们为每个字母赋予一个数值:'A'=0,'B ...
- mysql连接校对_mysql字符集和校对规则(Mysql校对集)
字符集的概念大家都清楚,校对规则很多人不了解,一般数据库开发中也用不到这个概念,mysql在这方便貌似很先进,大概介绍一下 简要说明 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用于 ...
- mysql字符集与校对规则设置_mysql中的字符集和校对规则(mysql校对集)
1.简要说明介绍 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用于比较字符的一套规则. MySql在collation提供较强的支持,oracel在这方面没查到相应的资料. 不同字符 ...
- 13、设置默认字符集和校对规则
MySQL 服务器可以支持多种字符集,在同一台服务器.同一个数据库甚至同一个表的不同字段中,都可以使用不同的字符集.Oracle 等其它数据库管理系统都只能使用相同的字符集,相比之下,MySQL 明显 ...
最新文章
- 简洁好用的数据库表结构文档生成工具!
- 一个图片 在另一个图片定位_一个好的listing,图片有哪些基本要求
- 两道相似题——water-easyJavabeans
- PHP大文件上传问题
- shopex证书无法安装解决方法探讨
- fianl属性 java_java基础-类的高级属性(包、final、内部类)
- dns在企业网络中的应用-1
- 投票选择eclipse.org的新界面
- 苹果内部文件曝光:iPhone SE3以外,还有大惊喜...
- 这次要说不明白 immutable 类,我就怎么地!
- phpmailer thinkphp3.2发送邮件
- 网页中嵌入swf文件的几种方法
- pl2303hxa串口线驱动_Prolific PL2303 USB转串口线驱动
- 台电固态硬盘用什么测试软件,常规测试、实际使用测试与总结_固态硬盘评测-中关村在线...
- 安卓3d游戏引擎_万达院线游戏、莉莉丝推新作;《天龙八部手游》不限号不删档测试开启...
- 神奇的分形艺术(一):无限长的曲线可能围住一块有限的面积
- 蚂蚁金服实习三面,offer已拿。我总结了所有面试题,其实也不过如此!!
- 大学计算机基础 - 第七章练习题
- 什么是软件危机?它有哪些典型表现?为什么会出现软件为危机?
- 2019年‘泰迪杯’数据分析职业技能大赛A题——个人代码分享
热门文章
- EL之Bagging(DTR):利用Bagging对回归问题(实数值评分预测)建模(调2参)
- Algorithm:【Algorithm算法进阶之路】之数据结构二十多种算法演示
- Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略
- Hadoop-2.7.4 八节点分布式集群安装
- 模型开发-GBDT决策树模型开发代码
- 在全局中调用类的静态成员函数
- 离线安装ADT和sdk
- 数据库如何生成sql语句
- SQL Server 堆表行存储大小(Record Size)
- 机器学习 聚类篇——DBSCAN的参数选择及其应用于离群值检测