为什么“自建数据迁移”后得到的都是乱码
b****s · b****s 发布于2015-12-17 12:04 浏览:3296 回复:0

有时候在RDS中用“自建数据迁移”的方式把我自己MySQL数据库的数据导入到RDS里,结果发现导入后的中文字符都变成了乱码。凌乱啊。。。

开工单咨询了百度的技术支持,得到的解释是:

在往RDS里做全库数据导入的时候,RDS这边是根据我的源数据库的默认字符集来设定导入时的字符集(这个数据库的默认字符集是在创建数据库的时候指定的,查看数据库的 character_set_database 变量就能知道当前的值)。
如果这个默认字符集和数据表里存储的实际字符的字符集不一致,那么RDS这边就等于设定了错误的字符集,导入的字符(尤其是中文)就可能出现乱码。

举个例子:如果数据库创建时指定的字符集是gbk,但是创建数据表(create table)时指定的是utf8,并且插入的实际字符也是utf8字符,那么就会出问题。为什么呢?因为RDS会根据数据库的默认字符集认为所有的表里存的是gbk字符,但是你实际存的是utf8,这就不一致了。

解决的方法也很简单:把数据库的默认字符集设成和数据表一样的字符集。在上面那个例子(数据库gbk,数据表utf8)里,在数据库里执行下面这个语句:
  alter database <dbname> default character set=utf-8
这样改完之后,RDS就能知道数据表里存的是utf8字符了,导入的数据就不会是乱码了。

点赞  ( 0 )
收藏
评论(0)
TOP