Mysql学习笔记-字符集以及字符序

参考书籍:Mysql核心技术与最佳实践 /孔祥盛编著. -北京:人民邮电出版社,2014.5 ISBN 978-7-115-33769-6

默认情况下,Mysql使用的是latinl字符集,其使用单字节编码,而汉子是双字节编码,导致中文字符乱码。

一、字符集及字符序概念

字符(character),此意义字符应该指ASCII编码,每个字符由一个数值对应,此数值就是字符的编码。

字符集(character set),一系列字符并赋值对应编码,所有的此类集合就是字符集。

字符序(collation),指同一字符集内字符之间的比较规则。一个字符集可以包含多种字符序,但只有一个默认字符序,每个字符序唯一对应一种字符集。

Mysql字符序命名规则:以字符序对应字符集名称开头,以国家名居中,以ci、cs、bin结尾。

ci:表示大小写不敏感

cs:表示大小写敏感

bin:表示按二进制编码值比较。

二、Mysql字符集与字符序

不用字符集支持不同地区字符,例如latin1支持西欧、希腊字符,gbk支持中文简体,big5支持中文繁体,utf8几乎支持世界所有国家字符。

各种字符集存储空间:

Latin1:一个字节(8bit)

gbk:两个字节

utf8:三个字节

Mysql各种字符存储空间:

Mysql为节省存储空间,默认时,一个gbk英文字符仅占用一个字节,一个utf8英文字符也仅占用一个字节。

查看当前Mysql实例支持的字符集、字符集默认的字符序,及字符集占用最大字节长度等信息的命令:

show character set;

clavesScreenShot_20160122_141120

查看当前Mysql会话使用字符集:

show variables like 'character%';

clavesScreenShot_20160122_141505

三、Mysql字符集设置

1、方法一:修改my.ini文件

[mysql]
default-character-set
character_set_client
character_set_connection
character_set_results
[mysqld]
character_set_server
character_set_database
character_set_server

注意:字符集修改的影响仅仅是新数据,不能影响数据库的原有数据。

2、方法二:使用mysql命令,临时修改“当前会话”

例如:

set character_set_client = gbk;

3、方法三:使用mysql命令,一次性的设置临时会话

set names gbk;