2009年11月

  Mysql 4.0及之前的版本是不区分字符集的,全部是latin1,而Mysql4.1之后Mysql支持多语言、多字节。在原来的服务器上使用的GBK编码,直接拷到Mysql 4.0是肯定不能正常运行。

另外,由于Mysql 4.0不支持多语言导致许多汉字在做主键索引是会存在冲突(二进制一直),虽然中间将数据顺利生成了sql语句但不能顺利导入到Mysql 4.0中,几经尝试,发现了一个非常快捷的方式回复BBS的运行:

在PHPMyAdmin中,选中需要到处的数据库,选择“导出”菜单选中需要导出的表,在“Options”组合框的“SQL compatibility mode”选中“MYSQL40”,在“结构”组合框选中“Add IF NOT EXISTS”、“添加 AUTO_INCREMENT 值”、“请在表名及字段名使用引号”,在下面的“导出类型”中选择“REPLACE”,在“另存为文件”组合框中选中“ZIP压缩”,点击“执行”按钮将生成的SQL文件保存到硬盘上。并将这个ZIP文件解压缩,用UltraEdit之类的编辑器打开这个sql文件,检查是否是UTF8编码,如果是则转换成ASCII编码。

将这个SQL文件使用mysql命令程序导入到数据库中即可:mysql -uroot -ppass dbname

这样就可以完成将数据从Mysql 5.0中导入到Mysql 4.0中了。唯一缺陷是会丢失部分数据,原因前面说过在Mysql4.0中不支持多字节语言,许多汉字的二进制一样导致主键冲突。

其实你从4中倒出数据,倒入5,虽然数据库及校验都是utf8的,但你里面的数据却市lantin1的.
你要从5再倒入4的话因为5安装character_set_system 就设置为utf8了,这个你要修改安装程序才能改为其他设置.
所以你要从5倒出数据想默认结果集为latin1的话,可以这样.
/var/mysql/bin/mysqldump --default-character-set=latin1 数据库 数据表 > 备份文件
备份文件中就会出现下面这样的内容
/*!40101 SET NAMES latin1 */;
要是出现
/*!40101 SET NAMES utf8 */;
的话就是把
数据库中的数据做了一次iconv的操作.