#查看当前登陆客户端字符集 
show variables like 'character_set%';

+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | latin1    #客户端字符集                   |
| character_set_connection | latin1    #连接字符集                     |
| character_set_database   | latin1    #数据库字符集,配置文件指定,或建库建表指定                        |
| character_set_filesystem | binary                                    |
| character_set_results    | latin1     #返回结果字符集                |
| character_set_server     | latin1     #服务器字符集                  |
| character_set_system     | utf8                                      |
| character_sets_dir       | /application/mysql-5.5.32/share/charsets/ |
+--------------------------+-------------------------------------------+

#查看表字符集
show create table d3306;
方法1:
插入数据前,看看当前数据库字符集
show create database d3306;

每次插入数据前先执行如下(临时生效)
set names latin1;

方法2: 
导入sql数据时增加参数

mysql -uroot -p123456 --default-character-set=latinl d3306 < test.sql

数据库外查看:
mysql -uroot -p123456 -e "set names latin1;select * from d3306.test;"
mysql -u root -p123456 -S /data/3306/mysql.sock -e "set names latin1;select * from d3306.student;"   
 
 
方法3:(永久生效)
 在配置文件里设置客户端及服务端相关参数
 
[client]
default-character-set=latin1
 
[mysqld]
default-character-set=latin1  适合5.1以前版本
 
character-set-server=latin1   适合5.5
 

 
show character set;
[root@A-host ~mysql -u root -p123456 -S /data/3306/mysql.sock -e "show character set;"     

create database d3306 default character set utf8 collate utf8_general_ci;


更改生产线上MySQL数据字符集方案

对已有的数据库想修改字符集不能直接通过
"alter database character set *" 或"alter table tablename character set *"
这两个命令都没有更新已有记录的字符集,而是只对新创建的表或者记录生效。

已经记录的字符集调整,必须先将数据导出,经过修改字符集后重新导入才可完成。

latin1 转 UTF8 总结

1、建库及建表的语句导出,sed批量修改改为utf8

2、导出所有mysql数据

3、修改mysql服务端和客户端编码为utf8 

4、删除原有的库表及数据。 

5、导入新的建库及建表的语句

6、导入mysql的所有数据



不乱码思想: 客户端,服务端,库,表,程序,统一字符集编码