一、查看编码
1、查看跟编码有关的变量: show variables like "char%":未使用use database前,database变量为创建数据库的默认值;进入某数据库后,database变量值为当前数据库的编码类型。
主要学习以下变量
set character_set_client
set character_set_connection
set character_set_database
set character_set_results
2、查看数据库编码:show create database dbname;
3、查看数据表编码:show create table tbname;
4、查看当前数据库状态(包括编码):status;
二、一些总结
1、load data infile “...” into table
该语句可以将文本文件中数据直接导入数据库。正确导入数据需要 当前table、待导文本文件2者编码一致,否则会出现乱码导致导入失败。
推测:导入sql文件原理类似,有待验证。
2、mysqldump
--default-character-set=utf8加入该参数,可以指定导出sql文件的编码,默认与results变量保持一致。
3、使用select查询时,出现中文乱码,跟character_set_results变量有关,该变量的值要与客户端使用的编码一致,否则显示为乱码。
例如,windows cmd使用的是gbk编码,则set character_set_results=gbk就可以显示中文,不论table本身的编码是什么,跟client、connection变量也无关。
例如,linux默认使用utf8编码,如果查询语句中出现中文,则需要set character_set_client=utf8,来告诉服务器输入得是utf8编码,否则查询不成功。
4、select ... from ... into outfile "" character set gkb, 可以指定导出文件的编码格式。
三、配置文件
linux位置/etc/my.cnf
[mysqld]标签下加入character_set_server=utf8, 可以将character_set_server、character_set_database两个变量的默认值设置为utf8;
[mysql]标签下加入default-character-set=utf8,可以将client、connection、results三个变量默认值设置为utf8,类似set names utf8,但set name为临时变更,重连恢复默认值;