MYSQL数据库中的字符集设置
在创建数据库和数据表的时候,可以选择对应字符编码方式,如utf8,gbk,gb2312等等。也可以在后面修改表的Collation配置。
所以数据表的Collation配置必须能够表示表中的中文字符,这是最基本的要求。然后字符必须是使用该Collation兼容的字符集来编码的,这样才能正常显示和被mysql处理。
字符集配置变量
可以通过如下命令查看字符集变量值:
show variables like 'char%';
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir D:\HwsApacheMaster\mysql\share\charsets\
SHOW VARIABLES LIKE 'collation%';
# Variable_name, Value
collation_connection, utf8_general_ci
collation_database, utf8_general_ci
collation_server, utf8_general_ci
这些变量的含义和作用,参见官方文档解释: Connection Character Sets and Collations。
中文乱码的基本原因:
- character_set_client:客户端的字符集
- character_set_results:结果字符集
- character_set_connection:连接字符集
这三个系统参数的作用:
- 信息输入路径: client--connection--server--database (数据传送方向从左到右,server负责解释和转换)
- 信息输出路径: database--server--connection--results (数据传送方向从左到右,server负责转换和输出)
故这几个系统参数的值须相同,不然以不同的编码方式传送数据,若编码方式不兼容,则容易造成乱码的问题。
客户端通过如下类似命令可以修改上述三个参数的字符集值:
set names gb2312;
但是该命令无法修改character_set_server变量的值,因此需要注意是否匹配一致。