标签:mysql
字符集定义了字符的编码方式,其中比较常见的是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,分别代表客户端,连接和返回结果的字符集。通常情况下,这三个字符集应该是相同点,才可以保证数据被正确的读出和写入。
- set names xxxx(需要每次都执行)
- 在my.cnf中mysql段加入default_character_set=xxxx(永久性改变)
版权声明:本文为博主原创文章,未经博主允许不得转载。
mysql字符集
标签:mysql
原文地址:http://blog.csdn.net/td901105td/article/details/47005483