作者DavidChiou
【以下案例只适用於全 utf-8 环境。若不同环境,必须作些修改。】
许多人可能会有这样的经验:明明全部系统都以 UTF-8 设置,但是用 phpMyAdmin 去看数据库时,发现中文字仍然是乱码。
若有发生这种情况,是因为虽然 mysql 本身及网页都是 utf-8, 但是 xoops 却用 latin1 将数据传给 mysql,因此最后是 utf-8 数据被以 latin1 的格式储存进数据库。其实在 xoops 来看没有任何问题,只是用 phpMyAdmin 看时,就都是乱码,较不好管理。
以下是环境:
mysql: 5.1.22
mysql 文字编码: utf-8 unicode
mysql 连线校对: utf-8_unicode_ci
所有数据库都以 utf-8 建立。
phpMyAdmin: 2.11.3 (Language 选 「中文 - Chinese Traditional」)
xoops 2.0.17.1
对於这种状况,解决的几个面向:
1. mysql 设定:
/etc/my.cnf (或 Windows 下的 my.ini) 要有以下设定:
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
init_connect='SET NAMES utf8'
2. 在 xoops 端,先前已有各位前辈在本论坛告知大家要在
xoops/class/database/mysqldatabase.php 加入以下这行:
@mysql_query("SET NAMES 'utf8'", $this->conn);
(加此行在 $result = mysql_query($sql, $this->conn); 之前)
就可以强制用 utf8 传输。
3. mySQL 数据库:
可是若有旧的 database 怎麽办? 照上面的方法改了之後,迈入 xoops 後以前所有的中文字都变乱码了,新输入或重新输入的中文字才会变正常显示。
没关系,照以下的步骤,就能将以前的数据库转码了:
先采以下方法将数据库 dump 出:
mysqldump --all-databases --default-character-set=latin1 -u root -p > dump.sql
修改 dump.sql 文件首页的:
/*!40101 SET NAMES latin1 */;
成为
/*!40101 SET NAMES utf8 */;
然后再将数据库 import 回即可:
mysql -u root -p < dump.sql
重新打开 xoops 看,中文一切 OK。进入 phpMyAdmin 看,也都没有乱码了。
Have a nice day!
来源:http://xoops.org.cn/modules/newbb/viewtopic.php?topic_id=14658&forum=1