MySQL 4.1x 中文乱码问题

现在多数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的数据库不向下兼容,所以升级的时候要三思啊。

“MySQL 4.1x 中文乱码问题” 有 125 个回响

页: [3] 2 1 » Show All

  1. 125
    Houston 说:

    Listen. Do not have an opinion while you listen because frankly, your opinion doesn?t hold much water outside of Your Universe. Just listen. Listen until their brain has been twisted like a dripping towel and what they have to say is all over the floor.

  2. 124
    LosAngeles 说:

    Assuming either the Left Wing or the Right Wing gained control of the country, it would probably fly around in circles.

  3. 123
    拼凑Jeff » » 考试到! 说:

    [...] 站点的界面暂时稍稍做了一点小修改,不过配色还大概需要再改善(没办法,我不是专业的designer,所以配色都是trial and error的)。Blog也顺便直接跳过Wordpress 2.3.1直接upgrade到2.3.2。至于之前无聊人遇到的问题这里倒是没有出现,我想我需要简单的解释一下。据我所知,自从MySQL更新到大概4.x的时候,它就加强了对Unicode的支援(包括可以为内容排序),但是之前对unicode的支援不是很完善,所以MySQL更新到4.x的时候会出现encoding上的混淆。为此当时候我花了好一阵子的时间把这个blog的所有data全部转去正确的unicode再重新导进database内。可是当时Wordpress和MySQL的沟通不太好(因为不是每个MySQL Server都会by default output in unicode的),每次upgrade wordpress的时候我都要修改一点点wordpress的coding。后来跳到2.3.0我总算不需要每次更新就去修改那个file,所以这次upgrade我的中文字还是很完美的出现在大家面前。 [...]

  4. 122
    ZRong’s Blog » MySQL4.1乱码问题与WordPress 说:

    [...] MySQL 4.1x 中文乱码问题 [...]

  5. 121
    kenjor 说:

    非常感谢

  6. 120
    指甲彩繪 说:

    感謝哦,原來是這樣。

  7. 119
    totostar 说:

    你好,我的乱码问题更严重.想请你分析下看怎么解决.我用phpmyadmin管理mysql数据库时,将一个字段的整理属性由原来的latin1_swedish_ci改成gb2312导致该字段乱码,然后改回原来的latin1_swedish_ci也不管用了,全变成?了.而且改回来后还是乱码.能解决的话,麻烦联系下我.
    qq:30104993

  8. 118
    野鸭 说:

    这个帖子真热。
    今天我也用 SET NAMES ‘utf8′ 解决了问题。
    嘿嘿。

  9. 117
    Kind Blue’s Space » WP中文乱码之旅 说:

    [...] 在此,要特别感谢桑林志的《MySQL 4.1x 中文乱码问题》,让我彻底走出了乱码阴影 [...]

  10. 116
    ddd 说:

    好有个问题就是从网页中提交中文到mysql数据库中
    在页面可以正常显示中文,可是数据库中是乱码,如何解决?

  11. 115
    eve 说:

    Hi,
    很高兴看到你的blog
    我在备份的时候遇到同样问题,用您建议的方法试了很多次也没有成功
    后来看系统的字符集和排序方式的设定,发现
    | collation_server | latin1_swedish_ci |
    | character_set_server | latin1 |
    是不是这两个值不改成utf8的,字体就没法显示正确?我无法更改web hosting server的这两个值,请问有什么解决方案嘛?
    多谢

  12. 114
    小雨 说:

    请问:不是这个版本的数据库可以用这样的方法解决吗?

  13. 113
    小雨 说:

    请问:不是这个版本的数据库可以用这样的方法解决吗?

  14. 112
    趣读吧 » WordPress数据库恢复手记 说:

    [...] 所有数据库操作完成, 登陆网站查看,一下子傻了,除了我在侧边栏里写的自我简介那几个字是正常汉字,其它全以”?”显示。难道字符设置不对?不可能啊数据库是原来的,当然字符设置也是原来的”utf-8″。上网找答案,原来以前MySQL版本为4.0的转到4.1或者更高版本时,会出现乱码。上服务器的说明中查看,原来老的服务器MySQL版本为4.0,而新的服务器版本为5.0,晕哦,可真先进。继续google,在”桑林志“的”MySQL 4.1x 中文乱码问题“中找到了解决方案。 [...]

  15. 111
    Common Sense » Blog Archive » 终于解决了wordpress备份中的乱码问题 说:

    [...] 由于编码不同,备份好的数据重新导入后,乱码是必不可少的。参考了若干的文章,如桑志林等等,依旧不成功。最后的事实证明,教程都没有问题。不过其中有一个很重要的环节需要注意: [...]

  16. 110
    使用"WordPress Database Backup"备份及恢复数据库方法 at 博弈 Just a Game 说:

    [...] 恢复过程通过HostMonster控制台自带的phpMyAdmin进行。为避免出现乱码,操作过程,参考了时光漫步,桑林志,夜工厂的文档,其中,推荐“时光漫步”的文档,图文并茂,简单易懂。 [...]

  17. 109
    WordPress数据库恢复手记 at E-space 说:

    [...] 所有数据库操作完成, 登陆网站查看,一下子傻了,除了我在侧边栏里写的自我简介那几个字是正常汉字,其它全以”?”显示。难道字符设置不对?不可能啊数据库是原来的,当然字符设置也是原来的”utf-8″。上网找答案,原来以前MySQL版本为4.0的转到4.1或者更高版本时,会出现乱码。上服务器的说明中查看,原来老的服务器MySQL版本为4.0,而新的服务器版本为5.0,晕哦,可真先进。继续google,在”桑林志“的”MySQL 4.1x 中文乱码问题“中找到了解决方案。 [...]

  18. 108
    My blog » Blog Archive » 轉移資料進度達95% 说:

    [...] SMF的那一篇文章 google找到的資料 主機商的回信 It appears that your mysql backup file is in UTF-8 encoding, it is likely that [...]

  19. 107
    wangming 说:

    b?茐瀂谡纥= A嫁鱷=遺|H.W.NL遫蠜蝧wy玩鹓垮7滮歼刍鹹砍鼷浳ow捷骥g竭L灈靟e??s? 藗馏 海Pa峳d ?帕韮??咚鯗空鑷y?J廈???y?R•咱>鎏€{?4 ?炙遪¬x % c姤€/塹k?5?^
    软抃?巺 睙H:燆 忖E淐G 鉻鼿炶F?悵 0扱^駧諴瞣能獀?¬F|\o?

  20. 106
    五音不全 - WordPress资源 说:

    [...] MySQL 4.1x 中文乱码问题 [...]

  21. 105
    Corr’s flyin’ » Blog Archive » trackback乱码 说:

    [...] Corr @ 15:35 in Wordpress 上次有篇日志trackback到了桑葚兄那边,可是他那边出来的页面,除了标题,其他都是乱码。不知道他在后台看到的会不会也是乱码一片。今天在他那边看到这一篇文章《MySQL 4.1x 中文乱码问题》。我试着按照里面的办法改了一下wp-db.php文件,可是,好象不起作用,而且后台管理页面也出错的情况。没办法,再“骚扰”一次桑葚兄吧,不知道这次正常没有,但愿显示正确! [...]

  22. 104
    百优科技 说:

    百优科技
    国际域名45/年.国内域名37/年.1G空间350/年.
    http://www.100u.net

  23. 103
    李杰的博客 | jaylee’s blog : 为Wordpress搭建一个镜像 说:

    [...] MySQL 4.1x 中文乱码问题 [...]

  24. 102
    來医 说:

    最好還是在 my.cnf 入手, 不用逐個php程式改code。在 my.cnf 中的 [client] 和 [mysqld] 章節中都加上一行 default-character-set=utf8
    就可以了:

    [client]
    default-character-set=utf8

    [mysqld]
    default-character-set=utf8

  25. 101
    華萊士 说:

    幸好你提出了在 wp-db.php 加入

    $this->dbh = @mysql_connect($dbhost,$dbuser,$dbpassword);
    //加上下面這行
    $this->query(”SET NAMES ‘utf8′”);

    否則我怎樣想也想不到竟是 wordpress 的問題! 謝謝你!

页: [3] 2 1 » Show All

敬请留言

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>