#查看当前登陆客户端字符集 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的所有数据
不乱码思想: 客户端,服务端,库,表,程序,统一字符集编码
停留在世界边缘,与之惜别