一、前言

字符集表示的是存储的二进制与字符如何映射的关系,比较规则指的是字符如何排序的规则,比如字符如果使用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字符集和比较规则相关推荐

  1. 数据库工作笔记002---新建mysql数据库的时候_对字符集和排序规则的选择

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 以前都选择utf8,习惯了,后来发现,有些,小表情类的字符用utf8是存不下的,后来 就改成mb4 ...

  2. mysql的查询排序规则_mysql 如何查看数据库字符集和排序规则

    查看数据库编码 (即字符集) show create database 数据库名; 查看数据表编码 (即字符集) show create table user 查看数据表全部字段排序规则 (即utf8 ...

  3. MySQL字符集和校对规则(Collation)

    MySQL字符集和校对规则(Collation) 阅读目录:MySQL的字符集和校对规则 MySQL的字符集 MySQL与字符集 正确使用字符集 MySQL客户端与字符集 字符集编码转换原理 字符集常 ...

  4. MySQL中支持的字符集和排序规则

    一.MySQL字符集概念 1.1 MySQL中的utf8和utf8mb4 我们常说 utf8 字符集表示一个字符需要使用1-4个字节,但是我们常用的一些字符使用1-3个字节就可以表示了.而在 MySQ ...

  5. 13、设置默认字符集和校对规则

    MySQL 服务器可以支持多种字符集,在同一台服务器.同一个数据库甚至同一个表的不同字段中,都可以使用不同的字符集.Oracle 等其它数据库管理系统都只能使用相同的字符集,相比之下,MySQL 明显 ...

  6. mysql默认字符集和排序_MySQL字符集和排序规则

    MySQL在创建数据库是,需要设置数据库的字符集和排序规则,如图所示: 我觉得这里有必要解释下字符集和排序规则这两个概念. 字符集 说到字符集,需要先提下字符.字符集和字符编码这几个词的含义. 字符( ...

  7. mysql连接校对_mysql字符集和校对规则(Mysql校对集)

    字符集的概念大家都清楚,校对规则很多人不了解,一般数据库开发中也用不到这个概念,mysql在这方便貌似很先进,大概介绍一下 简要说明 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用于 ...

  8. mysql字符集与校对规则设置_mysql中的字符集和校对规则(mysql校对集)

    1.简要说明介绍 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用于比较字符的一套规则. MySql在collation提供较强的支持,oracel在这方面没查到相应的资料. 不同字符 ...

  9. mysql 中文字符排序规则_mysql中字符集和排序规则说明

    数据库需要适应各种语言和字符就需要支持不同的字符集(Character Set),每种字符集也有各自的排序规则(Collation). 一.字符集 字符集,即用于定义字符在数据库中的编码的集合. 常见 ...

最新文章

  1. html 生成唯一码,生成唯一邀请码.html
  2. DLL version issue and SQL Parameters Issue
  3. CodeForces - 1494D Dogeforces(贪心+构造)
  4. 【CSP201312-1 】出现次数最多的数,排序后扫描并记录
  5. 09. 慎重选择删除元素的方法
  6. 局域网办公系统服务器备份,协同办公系统的数据备份经验分享
  7. ubuntu安装visio2010_ubuntu 一个Linux脚本搞定常用软件的安装
  8. android 模拟器 锁屏,锁屏桌面全模拟 Android 4.0伪装教程
  9. 关于《走进名企之微软亚洲研究院》的观后感
  10. c#基础知识学习——枚举、元组(四)
  11. 专业动漫库好看的3d动漫推荐(3D动漫排行榜2022)
  12. coursera 吴恩达 -- 第一课 神经网络和深度学习 :第三周课后习题 Key concepts on Deep Neural Networks Quiz, 10 questions
  13. RemoteViews完全解析
  14. Xcon北京黑客大会明天开幕
  15. 毕业设计、卷积cnn、lstm、random walk、地址交易识别
  16. Ecshop文件结构,二次开发
  17. Flash CS4 过期了
  18. origin画图工具使用
  19. 【经典100题】 题目16 求两个数的最大公约数和最小公倍数
  20. 计算机二级试题及分值分布,计算机二级各部分分值分布

热门文章

  1. 问题解决:使用angularjs、ionic框架如何实现返回上一页并刷新
  2. java实现 阿拉伯数字转换为汉字数字 算法
  3. C++ STL简介(转)
  4. Android应用程序变量
  5. 2.1.3码元、波特、速率、带宽
  6. 计算机组装与维修案例分析,设备故障维修案例分析三则
  7. java简单小项目_Java简易抽奖系统小项目
  8. php评论获取时间,WordPress函数comment_date获取评论发布时间
  9. python字符串怎么用_零基础如何使用python处理字符串?
  10. ajax实现重新绘图,如何画Flot AJAX更新图