背景:公司由于某种历史原因,导致数据库中新导入的数据与原有字符集不匹配,导入数据后,查询出现乱码,无法正常显示数据信息。
解决方法:导出原有数据库的数据信息,修改字符集后重新导入回去。前提条件是目标字符集需要大于或者等于已有字符集,否则导入失败。
操作过程如下:
===========================================
mysql> show create database HA; #查询HA库创建时的默认字符集信息
mysqldump -uroot -p --default-character-set=latin1 -d HA > hatable.sql #导出HA库的表结构,按照原有默认字符集导出,否则导出数据可能出错
musqldump -uroot -p --defalult-character-set=latin1 --no-create-info HA > hadata.sql #导出HA库的数据,no-create-info表示不要create table语句
使用sed命令或者vim编辑器将hatable.sql和hadata.sql中的latin1批量修改为uft8即可。
mysql> create database new default charset utf8; #创建新的数据库,用于数据导入
mysql> create database old default character set latin1;
myqldump -uroot -p new < hatable.sql #导入表结构
mysqldump -uroot -p new < hadata.sql #导入数据
注意:选择目标字符集时,要注意最好大于等于原字符集(字库更大),否则可能会丢失不被支持的数据
mysql> show database new;
mysql>use new;
mysql>show tables;
mysql>select * from tables; #验证数据信息是否还是乱码,正常显示,则表示成功。
原文:https://www.cnblogs.com/xiaofeng666/p/11747601.html