mysql字符集

来源:互联网 发布:股票教学软件 编辑:程序博客网 时间:2024/05/16 09:12
字符集定义了字符的编码方式,其中比较常见的是ASCII、GBK、UTF8编码集,所有的编码集都兼容ASCII字符集。
字符集
是否定长
编码方式
ASCII
单字节7位编码
GBK
双字节编码
UTF8
否(变长)
1~4字节编码
UNICODE编码一般是两个字节,可以编码99%的在用字符,提升了效率和内存空间。对MYSQL来说,UNICODE字符集就是UTF8。

在MYSQL执行explain命令的时候,key_len的长度与字符集有很大的关系。

(1).索引字段的附加信息:可以分为变长和定长数据类型。当索引字段为定长数据类型,比如char,int,datetime,需要有是否为空的标记,这个标记需要占用1个字节对于变长数据类型,比如:varchar,除了是否为空的标记外,还需要有长度信息,需要占用2个字节(所以变长的数据类型总共需要三个字节的额外信息)(备注:当字段定义为非空的时候,是否为空的标记将不占用字节)

(2).同时还需要考虑表所使用的字符集,不同的字符集,gbk编码的为一个字符2个字节,utf8编码的一个字符3个字节;

在数据库表的定义时,字段的长度和字符集没关系,表示的是字符的长度,不用担心在文件系统中占用几个字节。

在MYSQL中支持多种字符集,查看mysql支持的字符集
show charater set(或者使用select * from information_schema.character_sets)


MYSQL的字符集包括字符集(CHARACTER)和校对规则(COLLATION),字符集用来定义MYSQL存储字符串的方式,校对规则用来定义比较字符串的方式。字符集和校对规则是一对多的关系,每个字符集都至少有一个校对规则(默认校对规则)。

可以使用show collation like 'utf8'查看字符集的校对规则


校对规则的命名:字符集的名称+语言名+后缀。
后缀_ci表示大小写不敏感,_cs表示大小写敏感,_bin表示比较是基于字符编码的值而与language无关。
MYSQL可以支持多种粒度的字符集,粒度从大到小分别是:服务器>数据库>表>字段。
MYSQL字符集的设置:

当没有设定编码集的时候,默认使用latin1作为服务器编码集。当在/etc/my.cnf文件中mysqld下面添加character_set_server = utf8后,重启mysql服务,再次执行命令。

数据库的字符集和校对规则是在创建数据库的时候指定,也可以在创建数据库之后使用alter database进行修改。但是注意:
如果数据库中已经存在数据,因为修改字符集并不能将已有的数据按照新的字符集进行存放,所以不能修改数据库的字符集直接修改数据的内容。
数据库的字符集和校对规则:
show variables like 'character_set_database'

数据库没有指定字符集和校对规则,则使用MYSQL服务的字符集和该字符集默认的校对规则。也可以使用
create database character_set2 charset gbk collate gbk_chinese_ci来指定字符集和校对规则。

表的字符集和校对规则:
表的字符集和校对规则可以在创建表的时候执行,也可以使用alter table进行修改。同样,如果表中已有数据,修改字符集不会对原有记录有影响,不会按照新的字符集进行存放。
如果表没有设置字符集,那么会继承其上一级的字符集。

可以使用show create table来查看。

客户端和服务器交互的字符集和校对规则的设置
对于客户端和服务器的交互操作,MYSQL提供了三个不同的参数:character_set_client、character_set_connection、character_set_results,分别代表客户端,连接和返回结果的字符集。通常情况下,这三个字符集应该是相同点,才可以保证数据被正确的读出和写入。
  1. set names xxxx(需要每次都执行)
  2. 在my.cnf中mysql段加入default_character_set=xxxx(永久性改变)
0 0