MySQL 4.1x 中文乱码问题
by Yan
现在多数host装的还是MySQL 4.0x 版本以下,如果升级到了4.1x 或者移动到使用4.1x 的主机上,估计会遇到一些问题。我在powweb上遇到了两个问题。
一是数据导入。在phpMyAdmin内导入后,发现中文变成了乱码。搜索学习后,了解到需要设置数据库的collation (校勘),如果你的数据库是utf-8的,设置为utf8_general_ci就可以了。
二是,即使正确导入了,在phpMyAdmin里也能正确显示,但WordPress页面上显示的文章内容都是“???”,而模板里面的汉字都能正常显示。这让我头疼了很久。搜索到Windix’s Weblog上有对此的说明:
从MySQL 4.1开始引入的多语言支持确实很棒,而且一些特性已经超过了其他的数据库系统。不过我在测试过程中发现使用适用于MySQL 4.1之前的PHP语句操作MySQL数据库会造成乱码,即使是设置过了表字符集也是如此。我读了一下新的MySQL在线手册中第十章”Character Set Support“后终于找到了解决方法并测试通过。
MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。
当我们按照原来的方式通过PHP存取MySQL数据库时,就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:
SET NAMES ‘utf8’;
但是我依旧不知道,如何,在何处让WordPress运行这个SQL语句。后来在阿修的部落格上查到办法:
為著解決這個問題必須去修改wp-includes/wp-db.php內的資料連線設定。詳細的修改方式是這樣的:
$this->dbh = @mysql_connect($dbhost,$dbuser,$dbpassword);
//加上下面這行
$this->query("SET NAMES 'utf8'");
这样子终于能正常显示中文的WordPress了。虽然后来还是没用Powweb,但是觉得这个经验会对别人有用。记得有人用email和我讨论过这样子的中文显示问题,但是我那时哪里知道问题出在MySQL 4.1x上。
还有,4.1x的数据库不向下兼容,所以升级的时候要三思啊。
终于又能访问了。
“记得有人用email和我讨论过这样子的中文显示问题”,这个“有人”是我。
我之前也用的是 Powweb,正月初一开始不能访问。写信问客服,说是GFW挡了同一台服务器的某站点,所以整个服务器都不能在大陆访问到。只好退钱,也幸亏还能退钱。国内的基本不能退钱,比如见鬼的神话科技。
原来是你。:)
神话科技害你很深啊,到处看你指出神话科技的鬼。这样子好,后来人就不用重复这经验了。
晕了,早没看到这个文章。最后使用还原才解决问题。偶现在是数据库里面是乱码(部分表是拉丁瑞典语整理,就是操作为UTF8也不行),但页面读取是正常的UTF8,显示也正常。
偶的详细经历。有空再详细研究一下这个问题。
但偶提交的 mysql ISAM utf-8 bug 还一直没有解决的说..
http://bugs.mysql.com/bug.php?id=9557
我是用ASP链接 4.1的MYSQL老是显示???把我烦死了。怎么办怎办
看了手册第10章觉得主要还是Character Sets的问题。
character_set_client,character_set_results,character_set_connection三个运行变量是造成乱码的关键。mysql把客户端提交的查询由character_set_client转换为character_set_connection
,由于默认网页提交的查询是gb2312(表单页面meta里可以看到),而mysql默认将其当作utf8(可以查到此时的character_set_client=utf8),所以必然乱码。同理,mysql返回的结果是已经转换成character_set_results编码的(与表的编码无关),同样默认是utf8,而网页页面把它当gb2312处理,所以必然有标题等由数据库读出的字段是乱码而其他部门文字不乱码的现象。
感觉mysql 4.1+对字符集的支持真是相当的灵活。再强的数据库也不过如此吧,嘿嘿。
我的mysql连接校对用的是gb2312
所以用 @mysql_query(“SET NAMES ‘gb2312′”);
才能显示成功。
虽然有点麻烦,不过总算解决这个头疼问题了,xx!
请教站长,在UTF8模式下,存取数据库没有问题,而且页面显示也正常,可是一查看源码,所有的中文立马变成了乱码?为这个我郁闷了好久,到现在还没有解决。
我看贵站的Blog好像也存在这个问题,有没有去研究,或者有没有相关的经验分享一下?
to reins:
查看源文件中出现乱码不是因为数据库或UTF-8的原因!而是由于你的theme里边有不规范的代码!典型的错误是使用了中文的引号,这常常是因为你在设计theme的时候,从别的WordPress网站上复制了一些代码,而WordPress会把任何中英文的引号都转化为中文的引号,这就造成了错误!
为确认是这个错误,你只要更改你的theme为WordPress的默认模板default,再检查会不会产生乱码??!如果没有乱码,就说明你自己设计的theme有问题!
解决方法:检查你的theme,看看有没有不合规范的代码,特别注意中英文的引号问题!
MySQL 4.1x 中文乱码问题
MySQL 4.1x 中文乱码问题
…
MySQL 4.1x 中文乱码问题
原文地址:
MySQL 4.1x 中文乱码问题
现在多数host装的还是MySQL 4.0x 版本以下,如果升级到了4.1x 或者移动到使用4.1x 的主机上,估计会遇到一些问题。我在powweb上遇到了两个问题。
一是数…
搬家过程中也遇到乱码,很麻烦啊。
MYSQL 4.1X的乱码完全攻略
Mysql 4.1x,乱码,tt,plog
推介:免費的Wordpress Blog Hosting-InnerEyes
…
WordPress开张~
è½ç¶plogæ¯ä¸ä¸ªå¾å¥½çå¤ç¨æ·blogç³»ç»ï¼ä½æå¨ä½
引用通告过来怎么会是乱码呢??
我也不清楚,有的trackback正常,有个trackback不正常。估计还是MySql的问题。
用Wordpress搭建的一个Blog
è¿æ¯ç¨wordpressæ建çä¸ä¸ªblogãå¾é¿æ¶é´æ²¡ç¢°è¿ææ¯äºï¼ä¹ä
果然征文trackback还是乱码。用technotri搜索也是如此。不知如何解决。好像我的mysql还不是4.1x。
问题是你的还是我的MYSQL的问题啊?
我这里全部是4.1,UTF8编码,应该没问题吧?
btw: 怎么把trackback叫征文啊,很别扭
我的也是4.1,UTF8。:)
征文trackback打错了,是说trackback的正文部分是乱码,标题却不是。
弄了半天,最後全靠這篇文章。謝謝!
刚才又G了一下,发现tb的乱码不光是出现在wp中
原因是tb协议不支持多内码。。。
如果想解决这个问题,需要修改tb协议。。。
或者手工修改tb接收部分的处理方式。。。
期待wp官方出现解决方案
数据库为4.1 UTF-8,网页全用了UTF-8,数据库能正常显示中文,日文,繁体中文,但不能显示韩文,请教各位了,谢谢!!!
请大侠帮帮忙.
我配的是IIS+MYSQL5+PHP5+phpMyAdmin 2.6.4-rc1
MYSQL5,和phpMyAdmin 2.6.4-rc1中的中文显示正常,但是用PHP显数据里的中文数据时就出显几个”???”号,而且编码也是GB2312,用set names ‘gb2312’,还是不行.
其它的什么,charater_set_result ,charater_set_sever,charater_set_database,等都改成了GB2312,只有一个charater_set_system 是utf8,这个是只读属性改不掉!
但还是不行,,,
请大侠帮帮忙,
我的配置是IIS5+MYSQL5+PHP5+phpMyAdmin 2.6.4-rc1
在MYSQL和phpMyAdmin 中的中文显示很好,
但当我用
下面是用户数库的所有内容:
\n”;
echo”学号姓名”;
echo”QQE_mail”;
echo”性别地址”;
echo”\n”;
while($myrow=MySQL_fetch_row($result))
{
printf(“%s%s”,$myrow[0],$myrow[1]);
printf(“%s%s”,$myrow[2],$myrow[3]);
printf(“%s%s”,$myrow[4],$myrow[5]);
printf(“%s”,$myrow[6]);
}
echo”\n”;
?>
显示之后出现了:下面是用户数库的所有内容:
学号 姓名 QQ E_mail 性别 地址
20044415 ?? 357657132 wskaps@yahoo.com.cn F ???
20044416 ?? 54621378 chengyong@163.com F NULL
20044417 ??? 402572538 NULL F NULL
其中???是显示不出来的中文,不知道怎么回事,也不是浏览器编码的问题,,,
请大侠帮帮忙!!!谢谢!!
mysql> SHOW VARIABLES LIKE ‘character_set_%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | gb2312 |
| character_set_connection | gb2312 |
| character_set_database | gb2312 |
| character_set_results | gb2312 |
| character_set_server | gb2312 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
7 rows in set (0.00 sec)
mysql> SHOW VARIABLES LIKE ‘collation_%’;
+———————-+——————-+
| Variable_name | Value |
+———————-+——————-+
| collation_connection | gb2312_chinese_ci |
| collation_database | gb2312_chinese_ci |
| collation_server | gb2312_chinese_ci |
+———————-+——————-+
3 rows in set (0.00 sec)
我不懂技术的说,希望访问这里的朋友能帮上你。
在官方找了N久都没搜到相关的资料。
早知道就不用浪费500M空间了。
MYSQL4.1下的乱码问题
主机搬迁的时候曾遇到一个数据库版本的问题,数据从Mysql4.0X导入4.1X,中文字符全变成“???”,一直未找到解决办法,今天看到桑林志处有相关的解决方案。
為著解決這個問題必須去修…
— phpMyAdmin SQL Dump
— version 2.6.4
— http://www.phpmyadmin.net
—
— 主机: localhost
— 生成日期: 2005 年 12 月 08 日 16:46
— 服务器版本: 4.1.9
— PHP 版本: 4.4.1
—
— 数据库: `guestbook`
—
—
— 导出表中的数据 `guestbook`
—
INSERT INTO `guestbook` VALUES (‘Äþ×óÉý’, ‘ʯÅƶ«’, ‘wwerk@163.com’, ‘http://www.google.com’, ‘kjjnkn’);
数据乱码,郁闷了好几天,mysql 4.1.9
我也碰到MYSQL 5。0 存入中文数据后,数据显示乱码也
楼上几位遇到MYSQL乱码的朋友
记得在MYSQL 4.1以后添加了多字符集的支持
记得服务器字符集、客户端连接的字符集必须要一样才行
相关的文章很多
动一下手一般都能解决了
推荐使用UTF-8编码,一劳永逸
请帮我解决一下下列乱码问题,谢谢!
+T1VOrmYO-,+T1Vc8A-
加上这一行后这一行就报错了,奇怪,大家好像都应用正常
Parse error: parse error, unexpected ‘=’ in /home/blogisne/public_html/deeptree/wp/wp-includes/wp-db.php on line 44
to Xpoint:你的MYSQL数据库不是4.1以上就不要添加那行代码,或者不然会报错。我也试过。详细解决方案请参考我写的日志。
to 桑椹:请删除我发过来的有乱码的引用通知吧。你的BLOG还有有编码问题,查看你的网页源代码,里面的中文是乱码,很多人的WP的日志源代码中的中文是乱码,而我的BLOG中却没有乱码,你参考一下我的解决方法试试吧。
对了,我得谢谢你,你的日志给了我很大的帮助。:)
指出一下,文中关键这段代码中用了似乎使用了中文的标点,请桑葚做下更改,免得大家直接copy出错,谢谢你。
$this->query(”SET NAMES ‘utf8′”);
终于在你这里找到解决办法了,这个方法适用于DreamHost的数据库。
事情是这样的:
我的blog系统是MT,是老外的产品,默认编码是 UTF8。MT的数据库使用的是MySQ,虽然也是老外的产品,但是安装时候默认的数据库编码一般是latin1。其实这就已经出现了问题,比如你用 PHP查询的时候可能没有问题,但是用PHPMyadmin和其他数据库管理软件(比如MySQL CC)看到的汉字基本上是乱码。有时候连备份的.sql文件也是乱码。
恰好在这个新年开始的时候,我选择了升级MySQL和数据库备份的工作。我利用MySQL官方体提供的MySQL Administrator dump 1.4备份MT数据库,由于不熟悉这个工具(才出来吧,而且是英文的,就没有深究),备份的时候他的默认编码是UTF8,自然我备份下来的.sql文件是乱码。然后在升级完成后,我导入备份文件时就出现了乱码,更槽糕的是当时完全没有察觉,MT全部重建了,此时blog系统已经全部是乱码了。:(
http://isdq.com/image/process.jpg
现在的状况是:
1、我手头上只有.sql文件,且是乱码。
2、MT全部重建了,没有静态文件的存档。
我完全被这种状况给搞晕了,不知道大家有什么办法来解决?完美的转换备份文件的编码?恢复误删除的文件?各位有什么方法请告知于我,在下万分感谢。
ps:王建硕的blog(MT系统)也出现了问题,一个月没有开工了。我的虽然可以工作,但是以前的post都形同火星文字,想来这样也是不行的。
我们的高科技系统其实是多么的脆弱。还有那些个可恶的不同标准的默认编码。
iSdq,我也碰到过类似的问题,尝试了很多也无解,寄希望于别的访问者吧
xpoint,谢谢提醒,现在是不是可以了
to : iSdq
不知道这片文章 http://www.sh18.org/blog/?p=70 是否可以给你启发
[…] http://yanfeng.org/blog/585/ […]
[…] MySQL 4.1x 中文乱码问题 […]
[…] 所有数据库操作完成, 登陆网站查看,一下子傻了,除了我在侧边栏里写的自我简介那几个字是正常汉字,其它全以”?”显示。难道字符设置不对?不可能啊数据库是原来的,当然字符设置也是原来的”utf-8″。上网找答案,原来以前MySQL版本为4.0的转到4.1或者更高版本时,会出现乱码。上服务器的说明中查看,原来老的服务器MySQL版本为4.0,而新的服务器版本为5.0,晕哦,可真先进。继续google,在”桑林志“的”MySQL 4.1x 中文乱码问题“中找到了解决方案。 […]
不同版本的数据库导入我搞不定啊。。实在头疼!从高到低察看了n中办法了,不知道哪里出问题就是不行。
[…] […]
WordPress和MovableType的MySQL乱码问题解决方法…
WordPress和MovableType是主流的Blog系统,而他们都用的是MySQL数据库,那么在MySQL4.1下,中文的WP和MT就会产生种种的乱码问题。 如前MySQL4.1乱码问题分析的,一个程序( PHP,CGI 等)与MySQL建立连接…
[…] <a href=”http://yanfeng.org/blog/585/”>http://yanfeng.org/blog/585/</a> […]