首页
Narrow screen resolution Wide screen resolution default color green color orange color
6月 24 2007

将dh的mysql数据导入及导出的问题

(0 次投票)
2007-06-24
 

作者: eric,

查看 : 1870    

已被收藏 : 无

发表于: : 文章, Joomla教程


需求: 

我用的是DH的空间,现在要将整个网站移植到要地,也算是网站的一种备份吧

 

问题: 

dhphpmyadmin导出数据库后,打开导出的sql文件,发现中文是乱码,因此不管以后如何处理,导入到其它mysql数据库都是乱码

环境: 

<!--[if !supportLists]-->1、<!--[endif]-->DH上的数据库 

版本:5.0.24a-standard-log

 

mysql>  show variables where variable_name like 'char%';

+--------------------------+----------------------------------------+

| Variable_name            | Value                                  |

+--------------------------+----------------------------------------+

| character_set_client     | latin1                                 |

| character_set_connection | latin1                                 |

| character_set_database   | latin1                                 |

| character_set_filesystem | binary                                 |

| character_set_results    | latin1                                 |

| character_set_server     | latin1                                 |

| character_set_system     | utf8                                   |

| character_sets_dir       | /data/mysql/head/share/mysql/charsets/ |

+--------------------------+----------------------------------------+

8 rows in set (0.00 sec)

2本地数据库

4.1.22-community-nt

MySQL 字符集: UTF-8 Unicode (utf8)

Mysql连接校对utf8_unicode_ci

 

参考网上的文章,以下方法可以实现导入及导出都不是乱码

<!--[if !supportLists]-->一、<!--[endif]-->导出DH上的mysql5数据库

不要用dhphpmyadmin,直接用mysqldump,用法如下

mysqldump -hmysql.yourdomain.com --add-drop-table --default-character-set=latin1  --user=youruser --password=yourpassword --extended-insert=false databasename > databasename.sql

 

说明:使用时将代码的下面几项进行修改

<!--[if !supportLists]-->1         <!--[endif]-->mysql.yourdomain.com改成你自己的数据库所在的服务器的域名,应当可以填IP的,我没有试过

<!--[if !supportLists]-->2         <!--[endif]-->youruser改成你自己的mysql用户名

<!--[if !supportLists]-->3         <!--[endif]-->yourpassword改成你自己的mysql相对应的密码

<!--[if !supportLists]-->4         <!--[endif]-->database改成你要备份的数据库各

<!--[if !supportLists]-->5         <!--[endif]-->databasename.sql改成你想要生成的sql文件名

导出后,你可以用记事本打开测试,如果你打开后发现中文没有显示乱码,祝贺你,成功了一半。

 

注:

dhmysql默认不能远程连接,要在后台修改才能使用上面的命令。我们可以用ssh连上mysql空间,再连接上mysql服务器,然后再使用mysqldump命令。但是,请注意又一个但是,使用mysqldump时要提醒你没有权限,这需要到后台设置权限,因为我是合租dh的空间,是别人帮我改的权限,因此我也不知道如何设置了。

 

<!--[if !supportLists]-->二、<!--[endif]-->将导出的数据库导入到本地或其它地方的数据库中

注意做导入之前要修改一下导出的sql文件,否则导出时会出现错误,错误代码如下

ERROR 1071 (42000) at line 398: Specified key was too long; max key length is 1000 bytes

修改方法:打开刚才导出的sql文件,找到

  UNIQUE KEY `section_value_value_aro` (`section_value`,`value`),

  UNIQUE KEY `jos_kaigacl_section_value_value_aro` (`section_value`,`value`),

将这两行注释,也就是改成

  #UNIQUE KEY `section_value_value_aro` (`section_value`,`value`),

  #UNIQUE KEY `jos_kaigacl_section_value_value_aro` (`section_value`,`value`),

保存就ok了。

 

现在开始导入了,这里有两种方法,一是使用phpmyadmin,先建一个同名数据库,编码选默认的utf8,然后选择这个数据库,然后选择导入,选择刚才导出的文件即可,还有一种方法是使用mysql命令mysql --default-character-set=utf8 databasename -hhostname -uusername -pyourpassword < d:\database.sql

 

其它的数据库版本的导入及导出没有做过,可以参考。

 

以上做法参考

<!--[if !supportLists]-->1、  <!--[endif]-->http://hi.baidu.com/qjchina/blog/item/cd2f5266bf63f425aa184c2d.html

<!--[if !supportLists]-->2、  <!--[endif]-->http://www.fwolf.com/blog/post/310 作者:fwolf

附此文如下,讲得更详细

很久没有倒腾过mysql的字符集了,都疏忽了,以致于为LP安装Dreamhost上主机的时候,居然没有修改mysql数据库的字符集。也是由 于mysql这东西,即使字符集设置错了,也是吃啥吐啥,拿错误的字符集就往数据库里存,所以外面根本看不出来。今天给LP写了个自动备份脚本,才发现导 出的sql中全是乱码,岂能容忍?遂解决之~

首先还是放松了警惕,走了个弯路,我习惯使用的dump脚本是:

  1. <span style="font-size: 9pt;">mysqldump --add-drop-table --default-character-set=utf8 -h mysql.mydomain.com --user=fwolf --password=mypasswd --extended-insert=false fwolf_db > mydomain.com_db.sql</span><span style="font-size: 9pt;"> </span>
 

可是dump出来的sql一看中文全是乱码,于是去掉--default-character-set=utf8dump,数据依旧,一时没想过来,用iconvdump出来的sql左转换右转换怎么也是不对,后来才想明白,DHmysql字符集的默认设置是这样的:

 

  1. mysql> show variables where variable_name like 'char%';
 
  1. +--------------------------+--------------------------------------------+
 
  1. | Variable_name | Value |
 
  1. +--------------------------+--------------------------------------------+
 
  1. | character_set_client | latin1 |
 
  1. | character_set_connection | latin1 |
 
  1. | character_set_database | latin1 |
 
  1. | character_set_filesystem | binary |
 
  1. | character_set_results | latin1 |
 
  1. | character_set_server | latin1 |
 
  1. | character_set_system | utf8 |
 
  1. | character_sets_dir | /data/mysql/ovadilla/share/mysql/charsets/ |
 
  1. +--------------------------+--------------------------------------------+
 
  1. 8 rows in set (0.00 sec)
 

 

 

 

 

数据库服务器字符集是latin1,也就是mysql默认的latin1_swedish_ci,而系统的默认字符集则是utf8,所以不带--default-character-set=utf8参 数dump的数据的时候,其实和带上这个参数是一样的!想通这个问题,又知道了mysql吃啥吐啥的特性之后,解决方法就简单了,记住如果 WordPress和mysql都是默认设置的情况下,如果你能夠正常浏览中文,则说明配置就是错误的,因为WordPress默认也不是utf8字符集 的。

首先,按latin1字符集导出sql:

  1. mysqldump --add-drop-table --default-character-set=latin1 -h mysql.mydomain.com --user=fwolf --password=mypasswd --extended-insert=false fwolf_db > mydomain.com_db.sql
 
 

这样导出的sql中的中文应该都是正确的了,现在修改导出的sql文件,把其中的latin1全部替换为utf8,然后再重新导入数据库,导入的时候强制指定字符集为utf8

 

  1. mysql --default-character-set=utf8 fwolf_db -h mysql.mydomain.com -u fwolf -pmypasswd < mydomain.com_db.sql
 

 

这样,如果直接用mysql查询数据的话,如果不使用set names 'utf8',中文应该是乱码的,而如果你的数据库字符集仍然是默认的latin1的话,会是相反的情况:不使用set names 'utf8',中文正常,使用之后反而乱码。确认数据库字符集调整正确之后,再来搞定WordPress,这个就简单多了,编辑文件WP/wp-includes/wp-db.php,大概66行,在$this->select($dbname);前面,加上:

 

  1. $this->query('set names utf8');
 

这样就全部搞定了,数据库和Wordpress的字符集全部调整为万国码utf8

向朋友推荐




喜欢这篇文章?那就收藏它!
Digg!Reddit!Del.icio.us!Facebook!Slashdot!Technorati!Spurl!Simpy!Blinklist!Furl!Fark!Blogmarks!Yahoo!Smarking!Netvouz!Shadows!RawSugar!Ma.gnolia!PlugIM!Squidoo!BlogMemes!FeedMeLinks!BlinkBits!Tailrank!linkaGoGo!

   
转载本文
加为收藏
推荐给朋友
相关文章
收藏到 del.icio.us

关键词 : dreamhost.com, database transfer, export, import,


会员评论  评论的 RSS
 

会员平均评分

 


发表评论
姓名
E-mail
标题  
 
评论
 
剩余可输入字符数量: 600
   若有后续评论请通知我
  计算下面数学题并填写正确答案:
PU5         KAB      
O B    D      Q   719
R T   9BQ     U      
T P    S      4   YG7
L1P           G      
   
   

尚无评论发表



mXcomment 1.0.8 © 2007-2008 - visualclinic.fr
License Creative Commons - Some rights reserved
< 上一篇   下一篇 >

Donation below, thanks ! 请资助我们做的更好,谢谢!

Chinese translations for Joomla! CMS Core and extensions (components, modules, plugins, as well as free Joomla! templates)

I want to donate:
$

用支付宝向本站捐款

Donate to joomlagate.com to translate more Joomla! extensions and free Joomla! templates

下载最新版本 Joomla!

Joomla! CMS - free Joomla! templates

download the latest Joomla! CMS v1.0.15 download the latest Joomla! 1.5 CMS Core Chinese version 

会员登录

欢迎 访客.




忘记密码
没有账户? 马上注册

新增下载

JoomSEO for J1.5 搜索引擎优化插件 1.5.1 英文版
2008-08-07
Mad4Joomla Mailforms 寄送表单设计组件 1.1.4 多国语言版
2008-08-07
Ninja Plugoo for J1.5 即时聊天模块 1.0 简体中文版
2008-08-07
Allvideos Plugin for J1.0 音频视频嵌入播放触发器 2.5.2 简体中文版
2008-08-06
Allvideos Plugin for J1.5 音频视频嵌入播放插件 2.5.2 多国语言版
2008-08-06
Joomla! 1.5 Sitemap 站点地图生成组件 2.0 多国语言版
2008-08-06
civiCRM for J1.0 客户关系管理组件 2.0.5 英文版
2008-08-06
jPFchat 聊天室组件 1.0.5 多国语言版
2008-08-05
mXcomment 文章评论组件 1.0.8 多国语言版
2008-08-05
Seyret Video 视频分享组件 0.2.8 多国语言版
2008-08-04
您的IP: 38.103.63.18

在线会员

现在有 2 位访客在线

合作伙伴

推荐访客最多的网站: