技术改变生活

博客园 首页 新随笔 联系 订阅 管理

背景:公司由于某种历史原因,导致数据库中新导入的数据与原有字符集不匹配,导入数据后,查询出现乱码,无法正常显示数据信息。

解决方法:导出原有数据库的数据信息,修改字符集后重新导入回去。前提条件是目标字符集需要大于或者等于已有字符集,否则导入失败。

操作过程如下:

===========================================

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    #导入数据

 

数据导出

 

# 只导表结构
echo 'SET FOREIGN_KEY_CHECKS=0;' > mdb_tables.sql;
mysqldump -h127.0.0.1 -uuser -puser -d --add-drop-table=FALSE DBname >> mdb_tables.sql

# 只导数据库存储过程和函数
echo 'SET FOREIGN_KEY_CHECKS=0;' > mdb_cunchu.sql;
mysqldump -h127.0.0.1 -uuser -puser -ntd -R  DBname >> mdb_cunchu.sql

# 只导表数据
echo 'SET FOREIGN_KEY_CHECKS=0;' > mdb_data.sql;
mysqldump -h127.0.0.1 -uuser -puser --no-create-info  --complete-insert  --skip-tz-utc DBname >> mdb_data.sql

 

注意:选择目标字符集时,要注意最好大于等于原字符集(字库更大),否则可能会丢失不被支持的数据

mysql> show database new;

mysql>use new;

mysql>show tables;

mysql>select * from tables;    #验证数据信息是否还是乱码,正常显示,则表示成功。

  

 

posted on 2019-10-27 15:01  小阿峰  阅读(905)  评论(0编辑  收藏  举报