mysql系列_Mysql系列(三)—— Mysql字符集和比较规则
一、前言
字符集表示的是存储的二进制与字符如何映射的关系,比较规则指的是字符如何排序的规则,比如字符如果使用order by到底按什么规则进行排序。
二、查看命令
查看支持的字符集命令是:SHOW (CHARACTER SET|CHARSET) [LIKE 匹配的模式],CHARACTER SET|CHARSET同意,两者都可以用。
查看支持的比较规则命令是:SHOW COLLATION [LIKE 匹配的模式]。
注意,比较规则的命名方式有一定规律,一般来说,满足:
比较规则名称以与其关联的字符集的名称开头
后边紧跟着该比较规则主要作用于哪种语言,比如utf8_polish_ci表示以波兰语的规则比较,utf8_spanish_ci是以西班牙语的规则比较,utf8_general_ci是一种通用的比较规则。
名称后缀意味着该比较规则是否区分语言中的重音、大小写啥的,具体可以用的值如下:
后缀
英文释义
描述
_ai
accent insensitive
不区分重音
_as
accent sensitive
区分重音
_ci
case insensitive
不区分大小写
_cs
case sensitive
区分大小写
_bin
binary
以二进制方式比较
比如我们常用的utf8_general_ci这个比较规则是以ci结尾的,说明不区分大小写进行比较。
三、关于utf8与utfmb4
utf8和utfmb4是我们常用的字符集,这两者有什么区别勒?实际上真正的UTF-8 是1-4个字节,但是mysql里面的utf8不是指的这个,而是指的utf8mb3,其中mb表示的是最多占用多少个字节,mysql最开始为了节省空间资源偷偷把utf-8给阉割了,用1-3个字节表示,实际上1-3个字节也足够表示我们平常使用的字符了。而实际上utfmb4才是真正的utf8,能映射所有的unicode码。
四、字符集和比较规则的级别
MySQL有4个级别的字符集和比较规则,包括服务器级别、数据库级别、表级别、列级别,对于一个表的列,这几个级别粒度越具体的越优先使用,在创建数据库、表、列的时候,如果没有具体指定用什么字符集和比较规则,自动引用上一级别的配置。我们接下来看看各个级别的字符集和比较规则具体怎么设置。
服务器级别
系统变量
描述
character_set_server
服务器级别的字符集
collation_server
服务器级别的比较规则
如图,服务器级别的字符集和比较规则由系统变量character_set_server和collation_server控制,查看和修改命令上一篇文章介绍过。我们可以通过启动选项、配置文件、运行时更改来设置它。
数据库级别
数据库级别的字符集和比较规则的系统变量为:
系统变量
描述
character_set_database
当前数据库的字符集
collation_database
当前数据库的比较规则
如果想查看当前数据库使用的字符集和比较规则,可以使用以上的变量值进行查看(前提是使用USE语句选择当前默认数据库,如果没有默认数据库,则变量与相应的服务器级系统变量具有相同的值)。
另外,这两个变量是只读的,我们不能直接修改这两个值就把数据库的字符集和比较规则改变了。这两个值只能通过DDL语句去改变。语法格式为:
CREATE DATABASE 数据库名
[[DEFAULT] CHARACTER SET 字符集名称]
[[DEFAULT] COLLATE 比较规则名称];
ALTER DATABASE 数据库名
[[DEFAULT] CHARACTER SET 字符集名称]
[[DEFAULT] COLLATE 比较规则名称];
表级别
编辑和修改:
`` CREATE TABLE 表名 (列的信息) [[DEFAULT] CHARACTER SET 字符集名称] [COLLATE 比较规则名称]]
ALTER TABLE 表名 [[DEFAULT] CHARACTER SET 字符集名称] [COLLATE 比较规则名称] ``
列级别
编辑和修改:
CREATE TABLE 表名(
列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称],
其他列...
);
ALTER TABLE 表名 MODIFY 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称];
另外
由于字符集和比较规则是互相有联系的,如果我们只修改字符集,则比较规则将变为修改后的字符集默认的比较规则。,只修改比较规则,则字符集将变为修改后的比较规则对应的字符集。
五、Mysql中字符集的转换
我们知道从客户端发往服务器的请求本质上就是一个字符串,服务器向客户端返回的结果本质上也是一个字符串,而字符串其实是使用某种字符集编码的二进制数据。这个字符串可不是使用一种字符集的编码方式一条道走到黑的,从发送请求到返回结果这个过程中伴随着多次字符集的转换,在这个过程中会用到3个系统变量:
系统变量
描述
character_set_client
服务器解码请求时使用的字符集
character_set_connection
服务器处理请求时会把请求字符串从character_set_client转为character_set_connection
character_set_results
服务器向客户端返回数据时使用的字符集
多次转码流程如上图,注意,如果某个列使用的字符集和character_set_connection代表的字符集不一致的话,还需要进行一次字符集转换。一般情况下要使用保持这三个变量的值和客户端使用的字符集相同,免得不必要的编解码开销。
mysql系列_Mysql系列(三)—— Mysql字符集和比较规则相关推荐
- 数据库工作笔记002---新建mysql数据库的时候_对字符集和排序规则的选择
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 以前都选择utf8,习惯了,后来发现,有些,小表情类的字符用utf8是存不下的,后来 就改成mb4 ...
- mysql的查询排序规则_mysql 如何查看数据库字符集和排序规则
查看数据库编码 (即字符集) show create database 数据库名; 查看数据表编码 (即字符集) show create table user 查看数据表全部字段排序规则 (即utf8 ...
- MySQL字符集和校对规则(Collation)
MySQL字符集和校对规则(Collation) 阅读目录:MySQL的字符集和校对规则 MySQL的字符集 MySQL与字符集 正确使用字符集 MySQL客户端与字符集 字符集编码转换原理 字符集常 ...
- MySQL中支持的字符集和排序规则
一.MySQL字符集概念 1.1 MySQL中的utf8和utf8mb4 我们常说 utf8 字符集表示一个字符需要使用1-4个字节,但是我们常用的一些字符使用1-3个字节就可以表示了.而在 MySQ ...
- 13、设置默认字符集和校对规则
MySQL 服务器可以支持多种字符集,在同一台服务器.同一个数据库甚至同一个表的不同字段中,都可以使用不同的字符集.Oracle 等其它数据库管理系统都只能使用相同的字符集,相比之下,MySQL 明显 ...
- mysql默认字符集和排序_MySQL字符集和排序规则
MySQL在创建数据库是,需要设置数据库的字符集和排序规则,如图所示: 我觉得这里有必要解释下字符集和排序规则这两个概念. 字符集 说到字符集,需要先提下字符.字符集和字符编码这几个词的含义. 字符( ...
- mysql连接校对_mysql字符集和校对规则(Mysql校对集)
字符集的概念大家都清楚,校对规则很多人不了解,一般数据库开发中也用不到这个概念,mysql在这方便貌似很先进,大概介绍一下 简要说明 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用于 ...
- mysql字符集与校对规则设置_mysql中的字符集和校对规则(mysql校对集)
1.简要说明介绍 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用于比较字符的一套规则. MySql在collation提供较强的支持,oracel在这方面没查到相应的资料. 不同字符 ...
- mysql 中文字符排序规则_mysql中字符集和排序规则说明
数据库需要适应各种语言和字符就需要支持不同的字符集(Character Set),每种字符集也有各自的排序规则(Collation). 一.字符集 字符集,即用于定义字符在数据库中的编码的集合. 常见 ...
最新文章
- html 生成唯一码,生成唯一邀请码.html
- DLL version issue and SQL Parameters Issue
- CodeForces - 1494D Dogeforces(贪心+构造)
- 【CSP201312-1 】出现次数最多的数,排序后扫描并记录
- 09. 慎重选择删除元素的方法
- 局域网办公系统服务器备份,协同办公系统的数据备份经验分享
- ubuntu安装visio2010_ubuntu 一个Linux脚本搞定常用软件的安装
- android 模拟器 锁屏,锁屏桌面全模拟 Android 4.0伪装教程
- 关于《走进名企之微软亚洲研究院》的观后感
- c#基础知识学习——枚举、元组(四)
- 专业动漫库好看的3d动漫推荐(3D动漫排行榜2022)
- coursera 吴恩达 -- 第一课 神经网络和深度学习 :第三周课后习题 Key concepts on Deep Neural Networks Quiz, 10 questions
- RemoteViews完全解析
- Xcon北京黑客大会明天开幕
- 毕业设计、卷积cnn、lstm、random walk、地址交易识别
- Ecshop文件结构,二次开发
- Flash CS4 过期了
- origin画图工具使用
- 【经典100题】 题目16 求两个数的最大公约数和最小公倍数
- 计算机二级试题及分值分布,计算机二级各部分分值分布
热门文章
- 问题解决:使用angularjs、ionic框架如何实现返回上一页并刷新
- java实现 阿拉伯数字转换为汉字数字 算法
- C++ STL简介(转)
- Android应用程序变量
- 2.1.3码元、波特、速率、带宽
- 计算机组装与维修案例分析,设备故障维修案例分析三则
- java简单小项目_Java简易抽奖系统小项目
- php评论获取时间,WordPress函数comment_date获取评论发布时间
- python字符串怎么用_零基础如何使用python处理字符串?
- ajax实现重新绘图,如何画Flot AJAX更新图