因为不知道什么时候的原因,我们有一个数据库超级无赖的具有了无敌的特性:数据表的编码是Latin1-swXXXX什么的。而保存在里面的中文又是php强制以utf8保存在其中。因此,出了各种乱七八糟的怪里怪气的毛病。让我等对于MySQL这种数据库本就没有什么爱的人深感恶心。
因此,今日在研究之下终于解决此问题。再次说明,本文是把latin1转为utf8。
问题的核心还是在于要改变已有保存字符的混乱问题,最彻底和便捷的方法就是直接导出,然后再以对应所需的字符导入。
为了能够正确的导入,我们必须要确保导出的数据在你的文字编辑器下能够正常显示中文。对于我们这次的这个数据库,我们最终的导出语句是:
view plaincopy to clipboardPRint?
/usr/local/mysql/bin/mysqldump -p --opt --default-character-set=latin1 sends> /home/test/sends.sql
/usr/local/mysql/bin/mysqldump -p --opt --default-character-set=latin1 sends> /home/test/sends.sql
导出后你就自觉的先看看中文显示正不正常吧,如果不正常就回去改个编码继续导。。。。
如果正常,继续:
现在要准备导入,但是导入的工作之前有个预备工作要做,如果你之前只导出一个表。那修改你导出的文件中的这一行:
view plaincopy to clipboardprint?
/*!40101 SET NAMES latin1 */;
成为
/*!40101 SET NAMES utf8 */;
/*!40101 SET NAMES latin1 */;
成为
/*!40101 SET NAMES utf8 */;
如果不幸你导出的是整个有很多不同编码的数据表的数据库,ok。请使用替换工具把原来有的各种编码都替换成你要的目的编码。我这里原来有utf8和latin1,所以只需要把Latin1全部替换成utf8即可。
之后新建一个要导入数据的数据库: