mysql 從 latin1 轉 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 端,先前已有各位前輩在 http://xoops.org.cn 告知大家要在
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!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值