mysql 從 latin1 轉 utf-8 的經驗 [技术论坛 - 安装设置] imag1

正在浏览:   1 名游客






mysql 從 latin1 轉 utf-8 的經驗
中级会员
注册日期:
2007/12/18 23:58
所属群组:
注册会员
帖子: 52 | 精华: 4
等级: 6; EXP: 5
HP: 0 / 126
MP: 17 / 422
离线
【以下案例只适用於全 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!

2007/12/21 19:43
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: mysql 從 latin1 轉 utf-8 的經驗
资深会员
注册日期:
2006/8/22 16:04
所属群组:
注册会员
帖子: 169 | 精华: 1
等级: 12; EXP: 5
HP: 0 / 276
MP: 56 / 1994
离线
好帖,收藏了。

2007/12/21 21:02
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: mysql 從 latin1 轉 utf-8 的經驗
网站管理员
注册日期:
2005/10/29 13:32
来自 北京
所属群组:
网站管理员
注册会员
ComSupp
推广组
帖子: 2213 | 精华: 25
等级: 38; EXP: 42
HP: 374 / 935
MP: 737 / 8974
离线
关于第3点,转换旧的MySQL数据库乱码,真是太棒了!这个问题曾经困扰了我一段时间。

XOOPS2.0.16及其之前的gb2312版本由于没有处理好编码转换,安装后就存在这个问题:前台没有任何问题,但phpmyadmin中查看却是乱码。虽然不影响使用,但心里总是不大舒服。

现在有了转换方法,就能很容易地把旧数据库转换为完美状态。

2007/12/22 16:15
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: mysql 從 latin1 轉 utf-8 的經驗
资深会员
注册日期:
2006/1/10 1:51
所属群组:
注册会员
帖子: 181 | 精华: 1
等级: 12; EXP: 50
HP: 0 / 287
MP: 60 / 2591
离线
我的xoops安装的是gb2312版 ,但数据库却设成了utf-8,
sql 头文件显示为:/*!40101 SET NAMES utf8 */;

当然在数据库后台也是乱码了。

如果我想把我的xoops转为utf-8的,用domecc的方法似乎还不行。

不知怎么办。

谢谢

1/20 7:11
_________________
欢迎看看我做的小站:www.isurs.com
欢迎批评,多提宝贵意见
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: mysql 從 latin1 轉 utf-8 的經驗
Support Team
注册日期:
2006/11/30 20:48
来自 beijing
所属群组:
网站管理员
注册会员
Dev+Hack
资料整理组
帖子: 537 | 精华: 15
等级: 21; EXP: 34
HP: 101 / 508
MP: 179 / 3263
离线
用新版的phpmyadmin,在导入的时候可以选择导入数据库的编码,机器导出时候数据库的版本

还是推荐mysql5

1/21 1:33
_________________
哦的小站,发点牢骚。http://ez.xoops.cn欢迎大家踩踩。
工具箱 短消息 Email PDF 书签 打印 举报 回顶部





不可查看帖子。
不可发帖。
不可回复。
不可编辑自己的帖子。
不可删除自己的帖子。
不可发起投票调查。
不可在投票调查中投票。
不可上传附件。
不可不经审核直接发帖。
不可使用主题类别。
不可以使用HTML语法。
不可以使用签名档。

[高级搜索]