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的数据库不向下兼容,所以升级的时候要三思啊。
谢谢,解决了我的问题。
我用的虽然是nucleus,但在mysql_connect后面加了类似的mysql_query就行了。
/**
* Connects to mysql server
*/
function sql_connect() {
global $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE;
$connection = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD) or startUpError(‘Could not connect to MySQL database.’,’Connect Error’);
mysql_select_db($MYSQL_DATABASE) or startUpError(‘Could not select database: ‘. mysql_error().”, ‘Connect Error’);
$qry = mysql_query(“SET NAMES ‘utf8′”) or startUpError(‘SET NAMES Error.’); //就是这句
return $connection;
}
[…] http://yanfeng.org/blog/585/ […]
我以前在自己的电脑上调试WORDPRESS的时候一点问题都没有,可是有一次我的电脑坏了就把系统重新安装,然后安装完之后,用WORDPRESS的时屏幕上什么东西都没有显示,
我的是win2000ads en+apache2.0.5+php4.2.3+mysql4.0.1
你们也写得太高深了,对于mysql max版本,如下就搞定了
在max 版本的mysql中由于安装过程不需要configure所以无法在安装过程配置默认字符集。
唯一的办法就是在数据源目录下,即data目录下建立一个my.cnf文件,文件内容如下:
[mysqld]
default-character-set=gb2312
然后重新启动mysql.
[…] 昨天下了wamp5,准备再好好学学PHP和玩一下wordpress。 没想到一来就弄个麻烦的~从空间上备份的数据,导入到本地数据库后,竟然是一堆乱码(形如:????),自己是搞鼓了一整天(试了几乎所以相关的utf8编码都是不行)也是没搞定。 自己搞不定就找人问吧。来到海豚在google论坛上建的论坛上发言,下午海豚告诉我在苛世录上可找到解决办法,跟去→桑林志、Windix’s Weblog→阿修的部落格 原因是: 从MySQL 4.1开始引入的多语言支持确实很棒,而且一些特性已经超过了其他的数据库系统。不过我在测试过程中发现使用适用于MySQL 4.1之前的PHP语句操作MySQL数据库会造成乱码,即使是设置过了表字符集也是如此。我读了一下新的MySQL在线手册中第十章”Character Set Support“后终于找到了解决方法并测试通过。 […]
[…] 昨天下了wamp5,准备再好好学学PHP和玩一下wordpress。 没想到一来就弄个麻烦的~从空间上备份的数据,导入到本地数据库后,竟然是一堆乱码(形如:????),自己是搞鼓了一整天(试了几乎所以相关的utf8编码都是不行)也是没搞定。 自己搞不定就找人问吧。来到海豚在google论坛上建的论坛上发言,下午海豚告诉我在苛世录上可找到解决办法,跟去→桑林志、Windix’s Weblog→阿修的部落格 原因是: 从MySQL 4.1开始引入的多语言支持确实很棒,而且一些特性已经超过了其他的数据库系统。不过我在测试过程中发现使用适用于MySQL 4.1之前的PHP语句操作MySQL数据库会造成乱码,即使是设置过了表字符集也是如此。我读了一下新的MySQL在线手册中第十章”Character Set Support“后终于找到了解决方法并测试通过。 […]
[…] 2.更改WordPress程序中wp-includes/wp-db.php的文件:我是选择了在56行处,而不是44行处(桑林志的做法)加入了如下语句: $this->query("SET NAMES ‘utf8’"); […]
[…] http://yanfeng.org/blog/585 […]
I seldom work on Chinese Character set. But the method on this article helps me a lot….. It works!………….Thanks!!!!!!!!!!!!!!!!!1
[…] 参考文章:MySQL 4.1x 中文乱码问题 […]
[…] 导入Blog的数据的时候不幸的遇到了MySQL乱码问题,好在前人已经积累了丰富的经验。 […]
[…] 对于中文可能出现乱码的情况,桑葚在这里有一个解决方法。对于中文显示乱码的解决方法,基本上就是把能在phpMyAdmin里定义collation的地方全部定义为utf8_general_ci吧。 Technorati Tags: MySQL, wordpress, 乱码, 搬迁, 数据库 [ Google | AdSense for content ] […]
我在BLUEHOST上安装wordpress.org.cn导入数据库时也碰到了同样的问题。
我不知道我的怎么回事?
以前写的那些文章,现在部分文字是正常的,部分是乱码,而现在我试发了一篇,又是正常的,不明白,很晕!
按你的方法试,全部是乱码了…
头疼!~~
能否帮忙?
谢谢!
可能你的主机商偷偷升级 mysql 了
总的说是不错,我这么做完就都好了。不过觉得很奇怪,我用的是php5+mysql5,而且我的mysql是整个服务器都设为utf8的了。怎么还会出这问题。
请问 樑 能不能 在mysql中存放呀
[…] CCUBE說我在設定好了的伺服器中太久了,對著一個原始的伺服器是會束手無策。又或許是「一Host不能藏二Blog」吧,希望在那裡裝相簿會成功。 感謝以下網站提供大量資料讓我嘗試搬Wordpress,我對Wordpress的認識加深了。 桑林志 – MySQL 4.1x 中文亂碼問題 WordPress Codex – Using Permalinks PHP Function Lists […]
[…] http://yanfeng.org/blog/585/ […]
[…] 这个问题竟然是由于数据库没有向下兼容引起的,原因是大多数主机还是装4.0.x版本一下的MySql,而我自己机子上的是4.3.4版本的,看到这篇文章才知道解决方法。 […]
[…] MySQL 4.1x 中文乱码问题 […]
[…] 所 有数据库操作完成, 登陆网站查看,一下子傻了,除了我在侧边栏里写的自我简介那几个字是正常汉字,其它全以”?”显示。难道字符设置不对?不可能啊数据库是原来的,当然字符 设置也是原来的”utf-8″。上网找答案,原来以前MySQL版本为4.0的转到4.1或者更高版本时,会出现乱码。上服务器的说明中查看,原来老的服 务器MySQL版本为4.0,而新的服务器版本为5.0,晕哦,可真先进。继续google,在”桑林志“的”MySQL 4.1x 中文乱码问题“中找到了解决方案。 […]
[…] http://yanfeng.org/blog/585/ […]
[…] http://yanfeng.org/blog/585/ […]
test
[…] http://yanfeng.org/blog/585/ […]
@mysql_query(“SET NAMES ‘utf8′”);
只要页面用u8,连接数据库时用这句可以解决很多问题,zen-cart,joomla,wp都很好使,hehe
开发者社区
不知道你这种方法是否适合4.1升级到5.0的?多谢
我不清楚 4.1 到 5.0 是否还有这问题。
[…] http://yanfeng.org/blog/585/ […]
[…] 虽然服务器在国外,但访问速度,上传速度都挺快的,用dreamhost提供的一键安装功能,一两分钟就把wordpress 2.04及服务器安装好了,然后把之前备份的数据库导入新的服务器,用ftp上传自己的模版,最后用putty登陆到服务器,以超过300kbps的速度把东西从原来的服务器直接下载到新的服务器上面,就基本完成了安装,当中只有一点要注意的,就是数据库的正确导入和乱码的问题,其它都很方便。 电影:《龙虎门》1元更多特价DVD畅销图书65折封顶: 当当 卓越兄弟(余华) 5.5折, 越畅销越打折电影:疯狂的石头(2006.7出品)绝对精彩的国产搞笑片!人体使用手册一场养生方式的大革命 Leave a message Name […]
[…] 关于数据库乱码解决办法参见:http://yanfeng.org/blog/585/ […]
[…] wp的解决方案很完善了。不过架的Nucleus却一直有乱码问题。 […]
MySQL 4.1, 5.0, 5.1 都需要设置 charset, 默认好象是 Latin-1 吧。
我有同样乱码问题. 请高手指点在那页更改成 “UTF-8”
I encountered such problem while migrating my wordpress’s database from mysql 4.1 to 5.0, and this patch works. However I found it rather strange; under v4.1 I made a sql query in an unicode terminal, and the the chinese content displayed properly, but it is not the case under v5.0. Anyone know the reason?
I got it, one have to issue the command set names utf8 once connected to the database, a sort of protocol initialization, the result of SQL query will then be in the character set specified.
[…] http://yanfeng.org/blog/585/ […]
有没有知道,如果MP3中的汉字全变成了乱码该怎么办啊?~~~~~热心的大学可以给人回帖吗~~~~~~在这里先谢谢回帖的朋友了~~~~
set names ‘utf8’ 只能解决 MySQL 中文输出乱码问题, 不能解决 中文输入MYSQL 中文乱码问题.
一下三句话, 可以同时解决 输入输出乱码问题.
1)前提: 把存放中文的字段 collation: utf8_general_ci
2)mysql_select_db 之后, 执行以下三句话:
3)mysql_query(“SET character_set_client=’utf8′”);
mysql_query(“SET character_set_results=’utf8′”);
mysql_query(“SET collation_connection=’utf8_general_ci'”);
[…] http://yanfeng.org/blog/585/ […]
[…] 以上参考WordPress的Mysql 4.1中文乱码问题, 同样可以解决ExpressionEngine. 然后就可以按照Documentation中的步骤安装, 我的安装过程很顺利, 这也体现了EE的成熟. […]
[…] 来自于泊客myheimu以及桑椹 照做后 问题果然解决了 不过新的问题又出现了 […]
[…] 后台数据转移过程可就不是那么顺利了。经过多次导出导入、清空、删除等操作,大致问题整理如下: 1.整体导出导入时,数据库需要升级,一升级服务器就跟着出错。服务商说原因是“主机不支持.htaccess文件。程序自动生成了.htacess文件,数据库版本不一样。”我听得糊里糊涂,完全没有解决办法。 2.一条条导入的话,数据库会出现乱码。这个应该是MySQL 4.0.25转移到MySQL 4.1X出现的。暂时能找到的解决办法是http://yanfeng.org/blog/585/。 […]
[…] 经过查看许多网志(Andy、佐仔、土路托、桑椹等)后终于知道,这是由于 wordpress 自身默认使用的 Latin1 在作怪。要想使得数据库内中文内容正常显示,我们就得把它转换成 utf8 编码。这个过程很简单,只需要下面简单的几步: […]
终于导入成功了,不过每次升级WP都要添加$this->query(“SET NAMES ‘utf8′”);
,有点麻烦。谢谢桑葚
[…] 昨天下了wamp5,准备再好好学学PHP和玩一下wordpress。没想到一来就弄个麻烦的~从空间上备份的数据,导入到本地数据库后,竟然是一堆乱码(形如:????),自己是搞鼓了一整天(试了几乎所以相关的utf8编码都是不行)也是没搞定。自己搞不定就找人问吧。来到海豚在google论坛上建的论坛上发言,下午海豚告诉我在苛世录上可找到解决办法,跟去→桑林志、Windix’s Weblog→阿修的部落格原因是: […]
[…] 打算移除, 直接去下載 tarball 回來裝在自己的家目錄, 順便也把編碼, 還有 SET NAMES utf8 的 patch 解決, 然後又去找了個 theme 回來用, 目前為止看起來是還好, 雖然我覺得動態到 db 去抓資料出來顯示, 好像有點慢的感覺, (不過也有可能是我的電腦不夠快啦~ ) 總之先這麼用好了, 最近在期中考要寫什麼好像也不太可能, 沒關係啦~ 暑假再來說好了, 反正沒安排什麼活動, 應該是蠻閒的才對… ^^a […]
现在也是有这个问题了,好在已经解决了。
安装服务器的时候定了charset=utf8,然而站点是用gbk写的。导入的时候就出了问题。
mysql_query(“set names gbk”);
有一个很脏的做法是改my.cnf
init-connect=’SET NAMES gbk’
这样也可以,不过就是脏了点!!
参照:
http://dev.mysql.com/doc/refman/5.0/en/charset-charsets.html
實戰:WordPress数据库恢复及解决乱码问题…
前因:
不明原因,昨天留言顯示區域出現問題,害我花了2個小時重新恢復;但是發現仍舊存在下面問題:
相關截圖:
似乎是垃圾留言引起的問題?
0、我全新安裝后重新倒入備份數據,….