Chinaunix首页 | 论坛 | 博客
  • 博客访问: 253795
  • 博文数量: 45
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 673
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-10 13:50
文章分类
文章存档

2010年(3)

2009年(15)

2008年(27)

我的朋友

分类: Mysql/postgreSQL

2009-01-01 01:48:24

 
 
 

MySQL 数据库乱码问题解决办法

如果你遇到乱码问题,可以从下面几个问题逐步检查:

(1)检查你的文件存储编码是否和 meta 声明的一致,假如你的文件是按照 utf-8 编码存储,但是 meta 却声明为 gb2312 ,将导致乱码。

解决办法:将页面存储编码和 meta 声明保持一致。用记事本打开文件,“另存为”,下面有个选项是“编码”,选择和 meta 声明一致的编码方式。(提示:meta 的编码声明要放在 title 标签前面,否则容易导致页面空白。)

(2)检查你的有没有设置连接方式(SET NAMES),4.1 版本以后,如果你没有设置连接方式,那么插入或者查询将出现乱码情况。

解决办法:在你的连接后面(通常是在_conne后面,执行任何查询之前)加上一句 :

Code:
_query("SET NAMES utf8");


其中 utf8 需要根据你需要设置。

(3)检查你的页面编码、meta 声明、连接方式(SET NAMES)是否一致,如果你的页面和meta设置为gb2312,但是却在程序中设置 SET NAMES utf8,同样会导致乱码。原因是如果页面设置为 gb2312 ,那么表单中的数据也是按照 gb2312 提交,但是程序却要求按照 utf8 去处理,结果自然是乱码。

解决办法:将页面编码、meta 声明、连接方式(SET NAMES)保持一致,当然这里说的一致不是绝对的,如的 utf8 和页面中的 utf-8 是不一样的,具体要根据你的实际情况设置。

前段时间帮将 phpbb 2 迁移到 Discuz! 5,客户要求数据不能有太大损失,本来已经找到了一个转换程序,可以将原有数据迁移到新的数据表中,结果转换后发现页面上全是乱码。仔细研究发现:phpbb是按照默认的字符编码 latin1 ,而  Discuz! 用的是 gbk ,也就是标题说的“不同字符集数据表转换出现乱码”。

解决是转换数据编码方式:

第一步:将数据导出成期望的字符编码:
Code:
dump -u用户名 -p密码 --default-character-set=原字符集 --set-charset=期望字符集 --skip-opt名 > 导出的文件名.sql



在上文提到的例子中,用下面的命令:
Code:
dump -uroot -p*** --default-character-set=latin1 --set-charset=gbk --skip-opt phpbb> phpbb_gbk.sql



第二步:建立一个期望字符集的临时:
Code:
CREATE DATABASE `phpbb_gbk` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

注意:这个是上文提到的例子中所用的命令,具体到实际应用时,要根据需要设置。

第三步:将第一步备份的数据导入到这个新创建的临时里面:
Code:
-u用户名 -p密码 --default-character-set=期望字符集 -f名<第一步备份的文件名.sql


在我的例子中是用下面的命令:
Code:
-uroot -p*** --default-character-set=gbk -f phpbb_gbk
然后就可以在这两个之间执行转换程序了。

阅读(1425) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~