MySQL有两个字符集概念:一个就是字符集本身,一个是字符集校验规则。字符集影响数据在传输和存储过程中的处理方式,而字符集校验则影响ORDER BY和GROUPBY这些排序方式。
相关参数
mysql> show variables like 'char%';
mysql> show variables like 'collation%';
MySQL(4.1以后版本)服务器中有六个关键位置使用了字符集的概念,他们是:client、connection、results、database、server、system。
1.和存储有关的
MySQL中默认字符集的设置有四级:服务器级,数据库级,表级,字段级。
服务器字符集(character_set_server)
库字符集(character_set_database)
表字符集
字段字符集
character_set_server:
服务器安装时指定的默认字符集设定。
character_set_database:
数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
查看表级设置:
mysql> show create table tbl;
查看字段级设置:
mysql> show full columns from tbl;
在创建一个表的时候,每个字段只要不是binary,都会有一个字符集。如果不指定,那么在SHOW CREATE TABLE的时候,它会显示出来。
建表时候,系统选取字段字符集的策略如下:
if 字段指定的字符集
else if 表指定的字符集
else if character_set_database
else character_set_server(如果没有设定,这个值为latin1)
2.和传输有关的
character_set_connection:连接数据库的字符集设置类型
character_set_results:数据库给客户端返回时使用的字符集设定
character_set_client:客户端使用的字符集
它们受客户端默认字符集影响。
3.字符集的校对规则
字符集的校对规则设定分别由上面的collation_connection, collation_database, collation_server决定。
collation_server:服务器的默认校对规则。
collation_database:数据库默认使用的校对规则。当默认数据库改变时服务器则设置该变量,如果没有默认数据库,变量的值同collation_server。
collation_connection:连接字符集的校对规则。
4.其他
character_set_filesystem:操作系统文件系统的字符集设定,固定为binary。
设置
以上内容中需要将默认字符集设为utf8时,设置/etc/my.cnf
[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci
default-character-set只能改变对存储层的设定,对于客户端和服务器端的通讯层没有任何影响。
Windows下cmd不支持utf8,为了能在cmd下远程管理数据库,需要执行set names gbk,这个命令改变了和传输有关的字符集设置。
参考文献
MySQL字符集设置
http://blog.csdn.net/liuyuan185442111/article/details/42793575
http://jingyan.baidu.com/article/cb5d61050041fa005c2fe003.html
http://blog.csdn.net/ACMAIN_CHM/article/details/4174186
http://blog.163.com/zl_dream1106/blog/static/84286020123115563312/
让MYSQL彻底支持中文
http://blog.csdn.net/tsuliuchao/article/details/4145817