下载中心 | 网站地图 | 站内搜索 | 加入收藏

安恒公司 / 技术文章 / 安恒公司网管员手记 / mysql 4.1+ 汉字乱码问题研究 --安恒网管员手记

2005-09-15 刘世伟  阅:    下页:
mysql 4.1+ 汉字乱码问题研究 --安恒网管员手记

搞清楚了各种编码之后, 考虑到现在的文本编辑器还离不开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.完成升*.

下页:   

相关文章
快速得到mysql的历史数据状态 - 09-01-02 - 阅读: 139230
ezmlm邮件列表使用mysql方式管理帐号 - 08-11-20 - 阅读: 170278
mysql的relay-bin - 07-10-16 - 阅读: 170287
mysql*化[转贴] - 07-10-02 - 阅读: 167100
mysql数据库的2次灾难恢复实战 - 07-04-14 - 阅读: 197924
利用内存磁盘加速mysql --安恒网管员手记 - 06-06-26 - 阅读: 264835
mysql 双机热备实战 --安恒网管员手记 - 05-04-20 - 阅读: 221783
mysql的备份,备份,备份 --安恒网管员手记 - 05-01-12 - 阅读: 188662
安恒网管员手记:mysql的自动备份 - 03-11-02 - 阅读: 186980
安恒网管员手记: mysql密码忘记的修改 - 03-05-05 - 阅读: 224741
mysql双机热备份 - 03-02-12 - 阅读: 165858

Email给朋友 打印本文
版权所有·安恒公司 Copyright © 2004   e1.anheng.com.cn   All Rights Reserved    
北京市海淀区*体南路9号 主语国际商务中心4号楼8层 (邮编100048) 电话:010-88018877