文章管理 V1

mysql 從 latin1 轉 utf-8 的經驗

类别: Xoops 环境和安装
作者: cfc4n http://xoops.org.cn/modules/newbb/viewtopic.php?topic_id=14658&forum=1
日期: 06月19日
【以下案例只适用於全 utf-8 环境。若不同环境,必须作些修改。】
许多人可能会有这样的经验:明明全部系统都以 UTF-8 设置,但是用 phpMyAdmin 去看数据库时,发现中文字仍然是乱码。
摘要: 【以下案例只适用於全 utf-8 环境。若不同环境,必须作些修改。】
许多人可能会有这样的经验:明明全部系统都以 UTF-8 设置,但是用 phpMyAdmin 去看数据库时,发现中文字仍然是乱码。

作者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


文章管理 V1
URL: http://xoops.org.cn/modules/article/view.article.php/c8/40