Skip navigation.
主選單區塊
登入區塊
帳號:

密碼:


忘記密碼?

現在註冊!
搜尋區塊
線上人數
18人線上 (12人在瀏覽討論區)

會員: 0
遊客: 18

更多...

正在瀏覽:   1 名遊客





#1 mysql 從 latin1 轉 utf-8 的經驗
oldfish 2008/2/13 21:45
參考了網路: http://xoops.tnc.edu.tw/modules/newbb ... t_id=33850#forumpost33850

針對的是 xoops 的系統
對於學務系統,是不是也有類似的作法呢 ?

----------------------------------------------------------

【以下案例只適用於全 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 看,也都沒有亂碼了。

-----------------------------------------------

因為學校的學務系統,用 phpMyAdmin 看,似乎亂碼一堆,
但又不太敢亂動,不知道是否有新進有相關的經驗呢 ?

-----------------------------------------------


#2 Re: mysql 從 latin1 轉 utf-8 的經驗
yunfun 2008/2/15 0:27






可以查看帖子.
不可發帖.
不可回復.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.

[高級搜尋]


Powered by XOOPS2 繁體中文版 © 2001-2008 The XOOPS Project