字符集与校对集

字符集

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

)

原文地址:https://www.cnblogs.com/pittle-z/p/11743213.html