• 字符集与校对集


    字符集

    show character set可查看可用字符集(将一系列字符的编码规则组合起来就形成字符集)

    显示了字符集名称,描述信息,默认校对集(default collation)和单字符的最大长度(maxLen)

    下表展示了可用字符集的部分。

     

    常用字符集有latinl,gbk,utf8

    字符集        单字符最大长度      支持的语言

    Latinl                          1字节             西欧字符,希腊字符等

    Gbk                            2字节             简体和繁体中文,日文,韩文

    Utf8                           3字节             世界上大部分国家的文字

    单字符占用的存储空间越多,所支持的语言越多

    标准的UTF-8(RFC 3629)规定一个字符最多使用4个字节

    Mysql从5.5.3版本开始新增了utf8mb4,将一个字符扩展到4个字节。

    考虑RFC 3629规范,应使用utf8mb4

    校对集  SHOW COLLATION

    Mysql中提供了很多校对集,用于为不同字符集指定比较和排序规则。

    latinl 字符集默认校对集为latinnl_swedish_ci

    校对集用 _ 分隔3部分。第一个部分是对应的字符集,第二部分是国家名,结尾是ci,cs,或bin。其中ci表示不区分大小写,cs表示区分大小写,bin表示二进制方式比较

    通过SHOW COLLATION 可以查看mysql可用的校对集。

    下图显示了一部分的展示结果。

    显示了校对名称(collation) 对应字符集(charset) 校对集(id) 是否对应字符集的默认校对集(default) 是否已编译(compiled)以及排序的内存需求量(sortlen)

     

    字符集与校对集的设置

    SHOW VARIABLES LIKE 'character%'  查看与字符集相关的变量,查询结果如下

     

    character_set_client     utf8     客户端字符集
    character_set_connection utf8    
    客户端与服务器连接使用字符集
    character_set_database   utf8     默认数据库使用的字符集(mysql5.7.6后不推荐)
    character_set_filesystem binary  
    文件系统字符集
    character_set_results    utf8  
    将查询的结果(错误信息或结果集)返回客服端字符集
    character_set_server     utf8  
    服务器默认字符集
    character_set_system     utf8  
    服务器用来存储标识符的字符集
    character_sets_dir
    H:wampinmysqlmysql5.7.21sharecharsets  安装字符集目录

    character_set_server决定了新创建的数据库默认使用的字符集需要注意的是,数据库的字符集决定了数据表的默认字符集,数据表的默认字符集决定了字符的默认字符集。character_set_server的值默认为latinl(所以我们创建库的时候要注意了)

    character_set_client character_set_connection 和 character_set_results分别对应客户端,连接层和查询结果的字符集 。通常情况下这三个变量的值是相同的,具体值由客户端的编码而定,从而使客户端输入的字符和查询的结果多不会出现乱码。

    通过 “set 变量名 = 值”的命令可以更改变量的值。

    set character_set_client = gbk;

    set character_set_connection = gbk;

    set character_set_result = gbk;

    由于上面命令输入太麻烦,可以通过 “set name 字符集” 一次性修改3个变量的值。如:

    set names gbk 直接将客户端字符集,客户端与服务器连接字符集,查询结果字符集改成gbk

    注意事项

    1.set 或 set name修改字符集只对当前会话有效,不影响其他会话,且会话结束后,下次会话(如若不更改)仍然使用默认值。

    2.character_set__connection character_set_database 和 character_set_server 对应的校对集分别通过变量colllation_connection  collation_database character_server来指定。

    通过SHOW VARIABLES LIKE 'collation_%' 可查看与校对集相关的变量

     

    3.若字段使用utf8字符集,而客户端使用gbk字符集,mysql会自动进行编码转换。

    由于gbk和utf8本质上是不同的字符集,虽然大部分常见的字符可以转换成功,但若遇到其中一个字符集中没有的特殊字符,则可能出出现乱码。

    总结

    show character set 查看字符集

    SHOW VARIABLES LIKE 'character%'  查看与字符集相关的变量

    show engines;查看引擎

    SHOW COLLATION 查看校对集

    SHOW VARIABLES LIKE 'collation_%' 查看与校对集相关的变量

    set names gbk 直接将客户端字符集(character_set_client),客户端与服务器连接字符集(character_set_connection),查询结果字符集(character_set_results)改成gbk

    //使用场景

    1.数据库(character set + 指定字符集 collate + 指定校对集)

    //若仅仅指定字符集,表示使用该字符集默认校对集

    //若仅仅指定校对集,表示使用该校对集对应的字符集

    #创建数据库,指定字符集为utf8,默认校对集为utf_general_ci

    create database pittle character set utf8

    #创建数据库,指定字符集为utf8,校对集为utf8_bin

    Create database pittle character character set utf8 collate utf8_bin

    2.数据表(若没有为数据表指定字符集,则自动使用数据库字符集)

    create table pittle.user( …… )character set utf8 collate utf8_bin;

    指定数据表的字符集为utf8,校对集为utf8_bin

    在mysql中还可以将character set简写为 charset

    create table pittle.user( …… )default charset=utf8; //字符集为utf8默认校对集

    //pittle.user表示pittle下面的user表

    3.字段(若没有为数据表指定字符集与校对,则自动使用数据表字符集和校对)

    create table pittle(

             username varchar(20) character set uft8 collate utf8_bin

    )

  • 相关阅读:
    pycharm初始配置
    个人Python笔记
    Linux硬盘分区
    Linux基础(三)
    Linux基础(二)
    linux基础之基本命令
    计算机网络基础
    计算机操作系统
    计算机基础
    vim编辑器
  • 原文地址:https://www.cnblogs.com/pittle-z/p/11743213.html
Copyright © 2020-2023  润新知