« 这一次写blog已经是秋天...我也用上了MT 3.2 | (回到Blog入口) | 看了最新的X05上2k6和pgr3的画面..太喜欢了... »

MYSQL 4.1X的乱码完全攻略

MYSQL 4.1X出来也有点时间了...eee.....这次决心从3.23转移到4.1.10a.......也遇到了很多人碰到的编码问题.....今天2天研究...终于...完美的解决掉了.....先提供思路...以及TT,PLOG的具体解决方法....enen..

大家升级到4.1x主要会碰到的问题是什么呢?

一是数据导入。在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′;

好了..知道什么情况...那就来说说方法....我来用TT举例子......TT是一个典型的UTF-8编码的blog程序.......首先打开phpmyadmin......语言我用中文utf-8.....连接校对选择utf8_general_ci......建立一个新的数据库...默认整理是latin_swedish_1....eee..天知道mysql怎么默认这样....自己选成utf8_general_ci...好了...现在3个层次都是utf-8了...把以前的数据导进来....你发现phpmyadmin看到的都是正确的...可是程序还是不能显示正确....于是我们要修改连接层......打开tt根目录inc_function.php这个文件....

if (!$this->con) $this->db_error("DB数据库链接错误"); if (!@mysql_select_db($this->db, $this->con)) $this->db_error("DB数据库设定错误");

修改成

if (!$this->con) $this->db_error("DB数据库链接错误"); if (!@mysql_select_db($this->db, $this->con)) $this->db_error("DB数据库设定错误"); $this->con = mysql_query('SET NAMES \'utf8\'',$this->con);

打开前台..发现全部编码都正常了.....enen....如此..全部问题解决.....

plog的解决方法(摘录自Pesty's Article)为在SelectDB() 这个函数中修改:

function SelectDB($dbName) { $this->databaseName = $dbName; if ($this->_connectionID) { + $dbEncoding = + $this->_getDbDefaultEncoding($dbName); + if ($dbEncoding) { + mysql_query("SET NAMES $dbEncoding", + $this->_connectionID); + } return @mysql_select_db($dbName, $this->_connectionID); } else return false;

引用通告

TrackBack URL for this entry:
如果您想引用这篇文章到您的Blog,
请复制下面的链接,并放置到您发表文章的相应界面中。
http://www.zhouzhou.net/ZYZ/mt-tb.cgi/247

评论 (3)

iSdq:

事情是这样的:

我的blog系统是MT,是老外的产品,默认编码是 UTF8。MT的数据库使用的是MySQ,虽然也是老外的产品,但是安装时候默认的数据库编码一般是latin1。其实这就已经出现了问题,比如你用 PHP查询的时候可能没有问题,但是用PHPMyadmin和其他数据库管理软件(比如MySQL CC)看到的汉字基本上是乱码。有时候连备份的.sql文件也是乱码。

恰好在这个新年开始的时候,我选择了升级MySQL和数据库备份的工作。我利用MySQL官方体提供的MySQL Administrator dump 1.4备份MT数据库,由于不熟悉这个工具(才出来吧,而且是英文的,就没有深究),备份的时候他的默认编码是UTF8,自然我备份下来的.sql文件是乱码。然后在升级完成后,我导入备份文件时就出现了乱码,更槽糕的是当时完全没有察觉,MT全部重建了,此时blog系统已经全部是乱码了。:(

process

现在的状况是:

1、我手头上只有.sql文件,且是乱码。

2、MT全部重建了,没有静态文件的存档。

我完全被这种状况给搞晕了,不知道大家有什么办法来解决?完美的转换备份文件的编码?恢复误删除的文件?各位有什么方法请告知于我,在下万分感谢。

ps:王建硕的blog(MT系统)也出现了问题,一个月没有开工了。我的虽然可以工作,但是以前的post都形同火星文字,想来这样也是不行的。

我们的高科技系统其实是多么的脆弱。还有那些个可恶的不同标准的默认编码。

iSdq:

求助:

事情是这样的:

我的blog(isdq.com)系统是MT,是老外的产品,默认编码是 UTF8。MT的数据库使用的是MySQ,虽然也是老外的产品,但是安装时候默认的数据库编码一般是latin1。其实这就已经出现了问题,比如你用 PHP查询的时候可能没有问题,但是用PHPMyadmin和其他数据库管理软件(比如MySQL CC)看到的汉字基本上是乱码。有时候连备份的.sql文件也是乱码。

恰好在这个新年开始的时候,我选择了升级MySQL和数据库备份的工作。我利用MySQL官方体提供的MySQL Administrator dump 1.4备份MT数据库,由于不熟悉这个工具(才出来吧,而且是英文的,就没有深究),备份的时候他的默认编码是UTF8,自然我备份下来的.sql文件是乱码。然后在升级完成后,我导入备份文件时就出现了乱码,更槽糕的是当时完全没有察觉,MT全部重建了,此时blog系统已经全部是乱码了。:(

process

现在的状况是:

1、我手头上只有.sql文件,且是乱码。

2、MT全部重建了,没有静态文件的存档。

我完全被这种状况给搞晕了,不知道大家有什么办法来解决?完美的转换备份文件的编码?恢复误删除的文件?各位有什么方法请告知于我,在下万分感谢。

ps:王建硕的blog(MT系统)也出现了问题,一个月没有开工了。我的虽然可以工作,但是以前的post都形同火星文字,想来这样也是不行的。

我们的高科技系统其实是多么的脆弱。还有那些个可恶的不同标准的默认编码。

sID:

首先,想办法看到正常的SQL文件,用editplus转换,肯定能回来的,只要你真的是原始文件!
然后,你MT假如用的是MYSQL,请建立库什么的都用general_utf8,这样才能在phpmyadmin中看到正常的
ps:我本人喜欢MT配合文本数据库.backup超级方便.

发表一个评论

关于

此页面包含了发表于2005年10月08日 夜间04时19分的 Blog 上的单篇日记。

此 Blog 的前一篇日记是 这一次写blog已经是秋天...我也用上了MT 3.2

此 Blog 的后一篇日记是 看了最新的X05上2k6和pgr3的画面..太喜欢了...

更多信息可在 主索引 页和 归档 页看到。

Creative Commons License
此 Blog 中的日记遵循以下授权 Creative Commons(创作共用)授权.
Powered by
Movable Type 3.34