参考书籍: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;
查看当前Mysql会话使用字符集:
show variables like 'character%';
三、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;