美文网首页
MySql字符集

MySql字符集

作者: 春苟哈皮 | 来源:发表于2019-03-19 10:38 被阅读0次

字符集

计算机存储的是二进制数据,所以就需要建立一种规则表示二进制数据和字符之间的映射关系。这种规则就叫做字符集

比较规则

比较规则是建立在字符集的基础上的,用来比较两个字符的大小。

常用字符集

ASCII码

共128个字符,包括空格、标点符号、数字、大小写字母和一些看不到的字符。

使用一个字节进行编码。例:

'M' -> 0100 1101 (十六进制:0x4D,十进制:77)

'S' -> 0101 0011 (十六进制:0x53,十进制:83)

ISO 8859-1

共256字符,在ASCII基础上扩充了128个西欧常用字符。别名latin1

使用一个字符编码。

GB2312

收录了多种语言字体,其中包括汉字6763个。同时兼容了ASCII,所以在编码格式上有点奇怪。

  • 如果字符在ASCII字符集中,使用1字节编码
  • 否则使用2字节

GBK

GB2312的扩充,编码方式兼容GB2312

UTF8

收录了地球上所有已知的字符,还在不断扩充。

兼容ASCII,采用变长编码方式,每个字符使用1-4个字节。

MySql中的UTF8

因为utf8包含了太多内容,常用的字符使用1-3个字符就足够表示了。而且MySql中字符集表示一个字符所用最大字节长度在某些方面会影响系统的存储和性能,所以MySqlutf8定义了两个概念:

  • utf8mb3:阉割版utf8,使用1-3个字符,mysql中默认的utf8就是指的这个
  • utf8mb4:正版utf8,使用1-4个字符

MySql中的字符集转换

从客户端发送往服务器的请求本质就是一个字符串,服务器响应也是传递一个字符串。而字符串又是某种字符集的编码格式。所以在这个传输的过程中,就会出现多次字符集的转换,对mysql而言,这个过程会用到三个系统变量设置的字符集。

常量 描述
character_set_client 服务器解码请求时使用的字符集
character_set_connection 服务器运行过程中使用的字符集
character_set_results 服务器向客户端返回数据时使用的字符集

请求从发送到结果返回的字符集变化

  1. 客户端发送请求

    客户端采用的字符集与操作系统的字符集保持一致。

  2. 服务器接受客户端请求

    服务器会把接收到的请求认为是character_set_client字符集,把请求字符串按照该规则转码,对转码后的结果进行操作。

  3. 服务端返回操作结果给客户端

    服务器将把得到的结果集使用character_set_results编码后发送给客户端。

可以在配置文件里写

[client]
default-character-set=utf8

这样可以做到在启动客户端的时候将上面这三个常量都设置成UTF8

MySql的比较规则

命名规律

  • 比较规则名称以与其关联的字符集的名称开头。如上图的查询结果的比较规则名称都是以utf8开头的。

  • 后边紧跟着该比较规则主要作用于哪种语言,比如utf8_polish_ci表示以波兰语的规则比较,utf8_spanish_ci是以西班牙语的规则比较,utf8_general_ci是一种通用的比较规则。

  • 名称后缀意味着该比较规则是否区分语言中的重音、大小写啥的,具体可以用的值如下:

    后缀 英文释义 描述
    _ai accent insensitive 不区分重音
    _as accent sensitive 区分重音
    _ci case insensitive 不区分大小写
    _cs case sensitive 区分大小写
    _bin binary 以二进制方式比较

MySql字符集和比较规则的四种级别

  • 服务器级别

    character_set_server字符集

    collation_server比较规则

  • 数据库级别

    character_set_database字符集

    collation_database比较规则

  • 表级别

  • 列级别

查看MySql字符集

show variables like 'collation_%';
show variables like 'char%';

相关文章

  • 字符集与校对规则

    MySQL字符集及校对规则的理解 阅读目录:MySQL的字符集和校对规则 MySQL的字符集 MySQL与字符集 ...

  • MySQL字符排序

    关于MySQL字符集 可以参考文章MySQL字符集 & 重谈MySQL字符集 目录 大小写 比较规则 大小写 _c...

  • Mysql全备、增量备份及恢复

    Mysql字符集 MySQL数据库字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念,...

  • MySQL常见问题汇集

    字符集mysql 字符集(CHARACTER SET)和校对集(COLLATE)mysql 中 character...

  • Mysql字符集设置

    mysql字符集编码

  • 八、MySQL字符集

    字符集和排序规则简介   MySQL提供了多种字符集和排序规则选择,其中字符集设置和数据存储以及客户端与MySQL...

  • MySQL乱码问题

    MySQL字符集参数 MySQL参数使用 影响到字符编码的设置 数据库级别的字符集信息使用db.opt来存放字符集...

  • 字符集

    定义 mysql 的字符集包括 字符集 CHARACTER 和 校对规则COLLATION 两个概念 字符集 : ...

  • mysql 字符集设置查看

    1.列出MYSQL支持的所有字符集:SHOW CHARACTER SET; 2.当前MYSQL服务器字符集设置SH...

  • MYSQL字符集设置

    MYSQL的Workbench设置字符集失败,可以用以下命令行方式设置MYSQL字符集: 在my.cnf中设置: ...

网友评论

      本文标题:MySql字符集

      本文链接:https://www.haomeiwen.com/subject/uhgrmqtx.html