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字符集。

  • 相关阅读:
    在ModelSim中添加Xilinx仿真库
    关于DDR3非常棒的文章
    Modelsim编译Xilinx器件库的另一种方法
    FPGA按键去抖verilog代码
    DDOS与DDOS追踪的介绍
    自动实时监控Windows2003服务器终端登录
    Java 如何实现线程间通信
    C# 获取FormData数据
    利用 FormData 对象发送 Key/Value 对的异步请求
    jdk初始安装配置
  • 原文地址:https://www.cnblogs.com/y3596597/p/6899771.html
Copyright © 2011-2022 走看看