zoukankan      html  css  js  c++  java
  • mysql中对字符集和校对规则的认识

    字符集:指符号和字符编码的集合。
    校对规则:比较字符编码的方式。
    GBK2312:主要包括简体中文字符及常用符号,对于中文字符采用双字节编码的格式,也就是说一个汉字字符在存储占两个字节。
    GBK:包括有中、日、韩字符的大字符集,GB2312也是GBK的一个子集,就是说GB2312中的所有字符,GBK中全有,在这种情况下,我们也会将GBK称为GB2312的超集,GBK也是双字节编码的格式,将子集中的字符转换成超集中保存不会丢失信息(出现乱码);但反之则不一定。

    UTF-8:它对于英文字符集使用一个字节编码,而对于多字节符(如中文)则使用3个字节编码,UTF-8能够支持大部分常见的字符,包括西、中、日、韩、法、俄等各种文字,因此意以上提到的几种字符集都视为UTF-8的子集。

    UTF-8MB4:它是UTF-8的超集,是MySQL5.5版本才引进的,其引进是为了处理像emoji这类表情字符,一个字符使用4个字节编码,能支持的字符最广,但是相应占用的空间也最大。

    一个字符集至少会有一个校对规则,显示字符集的校对规则可以使用show collation 语句

    mysql数据库中字符集的校对规则都有一些共同的特点:

    1.每种校对规则只能属于一种字符集,
    2.每个字符集都有一个默认的校对规则
    3.校对规则的名称也有规则,通常开头的字符是校对规则所属的字符集,而后是其所属的语言,最后是校对规则类型的简写形式,有下列3种格式:
    。_cs:全称为case insensitive,这表示大小写不敏感的规则
    _cs:全称为case sensitive,这表示大小写敏感的规则
    _bin :即binary,表示这是一个二元校对规则,话说二元规则也是一定是大小写敏感规则

    MySQL服务响应客户端操作的字符的字符集和客户端信息处理过程:

    1.客户端发出的SQL语句,所使用的字符集由系统变量character_set_client来指定
    2.MySQL服务端接收语句后,会用character_set_connection和collation_connection两个系统变量中的设置,并且会将客户端发送的语句字符集由character_set_client转到character_set_connection(除非用户执行语句时,已经对字符列明确指定了字符集)。对于语句中指定的字符串比较或排序,还需要应用collation_connection中指定的校对规则处理,而对于语句中指定的列的比较则无关collation_connection的设置了,因为对象的列表拥有自己的校对规则,他们拥有更高的优先级
    3.MySQL服务执行完语句后,会按照character_set_result系统变量设置的字符集返回结果集(或错误信息)到客户端。
    可以用语句:show global variables like 'character_set_\%';查看这些系统变量设置。


    固化连接时的字符集设置:

    SET NAMES和SET CHARACTER SET命令都是基于会话设定的,也就是说,仅作用于当前会话,退出登录后所做设置也就失效,如果希望设置长期有效,可以在启动MySQL服务时,通过设置相关系统变量,达到永久生效的目的,可以到参数文件my.ini增加一行:
    [mysql]
    default-character-set=gbk
    这样,只要我们使用mysql命令行工具连接服务器后,连接的默认字符集就都会是设定好的GBK字符集。

  • 相关阅读:
    Libgdx之Music Sound 音效
    [Android]Activity的生命周期
    Android开发中无处不在的设计模式——动态代理模式
    Wireshark数据抓包分析——网络协议篇
    iOS-一个弹出菜单动画视图开源项目分享
    给Java开发人员的Play Framework(2.4)介绍 Part1:Play的优缺点以及适用场景
    mybatis自己学习的一些总结
    Cocos2d-x 源代码分析 : Scheduler(定时器) 源代码分析
    exe4j打包java应用程序
    删除sql server用户时报15138错误
  • 原文地址:https://www.cnblogs.com/y3596597/p/6899771.html
Copyright © 2011-2022 走看看