MySQL导入文本文件,字符集的问题

处理一大型论坛数据库时,碰到字符集的问题,dump出来的数据库为latin1,而新服务器数据库为GBK...不想重新导出..折腾半天无果..
还是老实点重新导吧..
详细过程可参照网上资料


从其他数据库导出的文本文件,在导入MySQL时,碰到字符集问题:
ERROR 1366 (HY000) at line 38: Incorrect string value:'\xC5\xAE' for column 'Sex' at row 1
表明,文本文件中,指定的sex列“女”字符,无法导入。
解决办法:
mysql --default-character-set=gbk -h[MySQL服务器IP地址] -u[用户名]-p[密码] [数据库名]<[数据文件]

从http://phpandseo.blog.sohu.com/72568454.html文章中受到启发。
现转载至此:
MySQL从4.1版本开始才提出字符集的概念,所以对于MySQL4.0及其以下的版本,他们的字符集都是Latin1的,所以有时候需要对mysql的字符集进行一下转换,MySQL版本的升级、降级,特别是升级MySQL的版本,为了不让程序继续沿用Latin1字符集之后对以后Discuz!版本升级的影响和安装SupeSite,这就需要我们进行字符集的转换!
本人转换过好多数据了,也用过了好多的办法,个人感觉最好用的就是使用MySQL命令导出导入中将字符集转换过去!
现在我将用图文并茂的方式向大家展示一下如何将MySQL字符集进行转换,由于字符集比较多,现在主要举GBK和Latin1这两种字符集之间的转换!
首先我将讲解一下如何将MySQL从GBK转换为Latin1的(如果是UTF8或者BIG5转换即将GBK换成相应的字符集即可)!这种问题常发生在MySQL从MySQL4.1及其以上版本转换为MySQL4.1以下的版本的过程中!有的人图个方便,特别是有主机权限的,直接将MySQL的data目录下的文件拷贝过去了,这样造成的问题就是乱码问题!当然我所说的这些都要求你必须拥有主机权限,虚拟主机用户可以在本地搭建好论坛,下载数据到你的本地,然后把数据导入到你本地的数据库,然后进行字符集的转换!

现在的步骤就是将MySQL的数据导出了,在mysql的命令提示符下(linux系统为mysql的命令目录下),输入下面导出的命令:

[php]mysqldump -uroot -p--default-character-set=gbk --set-charset=latin1--compatible=mysql40 --skip-optdiscuz>discuz.sql[/php]

这样就轻松的将数据从MySQL数据库中导出了,此时导出的文件在与mysql命令同级的目录下,即bin目录下,而且已经将MySQL字符集导出为Latin1的了!现在要做的就是将数据导入MySQL4.0中去!
同样在4.0版本的mysql命令提示符下(linux系统为mysql的命令目录下),输入下面导入命令:

[php]mysql -uroot -p--default-character-set=latin1 -fdiscuz<discuz.sql[/php]

这样就将字符集从GBK转为Latin1同时将MySQL从4.1以上版本的转为MySQL4.0的了!
现在讲解一下如何从Latin1字符集转换为GBK的!
由于只有MySQL4.1以上的版本才有字符集的概念,所以如果你要将MySQL4.0的字符集从Latin1转换为GBK字符集的话,必须导入到MySQL4.1以上的版本中,然后再导出!这里面就多了一个导出为Latin1的步骤!
同样在MySQL4.0的命令提示符下,输入下面导出的命令:

[php]mysqldump -uroot -p--default-character-set=latin1 --set-charset=latin1 --skip-optdiscuz>discuz.sql[/php]

然后导入到MySQL4.1中,输入下面导入的命令:

[php]mysql -uroot -p--default-character-set=latin1 -fdiscuz<discuz.sql[/php]

然后在MySQL4.1下转换字符集,分别输入下面导出和导入的命令:
/php]mysqldump -uroot -p--default-character-set=latin1 --set-charset=gbk --skip-optdiscuz>discuz.sql
mysql -uroot -p--default-character-set=gbk -fnewdiscuz<discuz.sql[/php]
如果不出问题的话,那么转换就完毕了!其实整个过程还是比较简单的,只是过程看起来比较麻烦些,但是过程却是很简单明了的!
下面举出一个在导入过程中极易容易出现的问题!
在导入的时候容易出现unknown command'/'这样的错误,其实这是由于MySQL在导出的时候,它有时候给一些繁体字后面自动加上了个反斜杠造成的!解决此问题的办法就是打开备份的sql(这里为discuz.sql),提示错误的时候会提示具体哪行出现了错误,找到那行,把反斜杠去掉就行了!其实你可以用Ultraedit这些文本处理的工具,批量的去处理这些反斜杠

!凭个人经验,有很多用户名取的比较怪,这样就容易出现反斜杠,这样只要纠正那些用户名就行了!
以上是个人在转换数据过程中的一些经验之谈,很多地方还有待大家完善!
Mysql 数据的导出
有的站长经常用一种最直接的办法就是拷贝数据库文件夹的办法,这个方法确实简单,但是不提倡,在跨版本或者跨不同字符集系统是很容易出问题.数据库4.1版本有两种存储数据的方式在配置的时候可选,一种是和以前一样的每个数据库存放在单独的文件夹里,另一种叫什么来着我忘了,这种所有的数据库都放在一个文件里,巨大的一个文件,所以对于后者就不可以用拷贝的方法了,用什么呢?
下面介绍:
就是mysql自带的工具mysqldump,这个工具十分强大,可以导出数据,并且可以导出不同版本的数据、也可以导出用于其他数据库的数据.这个工具实在命令行、cmd下用的,如果你的msyql/bin目录没有配置在系统的环境变量里,就先cd到mysql/bin目录.

1、先介绍简单得导出:mysqldump -u 数据库用户名 -p 数据库名称 [表名]> 导出到文件的路径名
例如:我要导出test_db这个数据库,数据库用户为root没有密码(没有密码就不用加 -p了):

[php]mysqldump-u root test_db > c:\test.sql[/php]

这样就可以到处test这个数据库了
如果我要导出 test数据库中的user 表用 ajin 这个用户 密码是 123

[php]mysqldump-u 用户名 -p密码 test_db user>c:\test_user_table.sql[/php]

回车后提示输入密码就可以了
2、在导出过程中改变数据库默认的字符集
例如:我要导出test_db 这个数据库 转换编码为 utf8 (utf8 我最常用的)

[php]mysqldump-u 用户名 -p密码 --default-character-set=utf8 test_db>c:\test.sql[/php]

转换成其他字符只需替换utf8 就可以了
3、导出不同版本数据或者导出给数据库用的数据
例如:我的数据库Mysql 4.1 的 我要导出一个 默认字符集 utf8 的 4.0版本的数据

[php]mysqldump-u 用户名 -p密码 test_db --compatible=mysql40--default-character-set=utf8 test_db>c:\test_user_table.sql[/php]

就可完成了所谓的降级--compatible= 可以跟得参数有 mysql323 mysql40 oracle mssql db2 等等.
二数据的导入
在命令行、cmd下用的,如果你的msyql/bin目录没有配置在系统的环境变量里,就先cd到mysql/bin目录.
比如我要导入test.sql 这个数据到discuz_db这个数据库

[php]mysql -u用户名 -p密码 discuz_db <c:\test_user_table.sql[/php]

1.导出整个数据库

[php]mysqldump -u 用户名 -p密码 数据库名 >导出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc >wcnc.sql[/php]

2.导出一个表

[php]mysqldump -u 用户名 -p密码 数据库名 表名>导出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc users>wcnc_users.sql[/php]

3.导出一个数据库结构

[php]mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc>wcnc_db.sql
-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table[/php]

4.导入数据库
常用source 命令
进入mysql数据库控制台,

[php]mysql -u root -p
mysql>use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source wcnc_db.sql[/php]

还没有评论,快来抢沙发!

发表评论

  • 😉
  • 😐
  • 😡
  • 😈
  • 🙂
  • 😯
  • 🙁
  • 🙄
  • 😛
  • 😳
  • 😮
  • emoji-mrgree
  • 😆
  • 💡
  • 😀
  • 👿
  • 😥
  • 😎
  • ➡
  • 😕
  • ❓
  • ❗
  • 69 queries in 0.427 seconds