搞清楚了各种编码之后, 考虑到现在的文本编辑器还离不开gbk编码,
制定了如下的mysql升*方案:
mysql服务器存储使用utf8, mysql客户端使用gbk, html和php使用gbk,这样把应用移植到mysql 4.1+
现在的数据库的服务器存储格式是gbk, 直接把服务器换成utf8肯定会造成乱码.所以**用mysqldump
把数据都导出成gbk的sql文本, 然后在mysql5.0下用utf8格式重建数据库,并导入.
1.导出所有的数据库.用mysqldump,此时,mysql-server是4.0,gbk编码:
mysqldump --host=127.0.0.1 --default-character-set=latin1 --add-drop-table -c --allow-keywords --force --password=!w@4d \
--user=root table1 >0.sql
*用gbk编码看*下0.sql,确认不是乱码, 再进行下面的操作
export LANG=zh_CN.GBK
vi 0.sql
正确导出的sql文件参考这么修改:
--- 0.sql 2010-02-25 11:23:00.000000000 +0800
+++ 1.sql 2010-02-25 11:26:04.000000000 +0800
@@ -7,7 +7,7 @@
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES latin1 */;
+/*!40101 SET NAMES gbk */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
@@ -21,9 +21,9 @@
DROP TABLE IF EXISTS `cdb_members`;
SET @saved_cs_client = @@character_set_client;
-SET character_set_client = gbk;
+SET character_set_client = gbk;
CREATE TABLE `cdb_members` (
`uid` int(10) NOT NULL auto_increment,
`username` varchar(25) NOT NULL default '',
`password` varchar(40) NOT NULL default '',
`regdate` bigint(30) NOT NULL default '0',
@@ -59,7 +59,7 @@
PRIMARY KEY (`uid`),
KEY `username` (`username`),
KEY `status` (`status`)
-) ENGINE=MyISAM AUTO_INCREMENT=32767 DEFAULT CHARSET=latin1;
+) ENGINE=MyISAM AUTO_INCREMENT=32767 DEFAULT CHARSET=utf8;
SET character_set_client = @saved_cs_client;
--
2.升*服务器到5.0 设置\etc\mysql\my.cnf,
[client]
//客户端默认gbk编码
default-character-set =gbk
[mysqld_safe]
//服务器使用utf-8
character_set_server = utf8
[mysqld]
//服务器使用utf-8
character_set_server =utf8
[mysqldump]
//mysqldump使用 gbk (本地导出)
default-character-set =gbk
[mysql]
//mysql命令行使用gbk (本地导入)
default-character-set =gbk
3.用phpmyadmin等工具,或者直接用mysql命令行重新建立数据库
4.用mysql命令行导入备份的数据.
mysql -u root -p --default-character-set=gbk table1 <1.sql
5.修改php程序,在每次联结数据库操作(mysql_connect())后面增加*句
mysql_query("SET CHARACTER SET gbk");
6.完成升*.