[分享]MySQL 4.1+ 的轉碼方式

Webmasters Discussion
站長們到此分享架站甘苦、管理心得等;歡迎大家多多提出意見喔!
(請勿發表任何跟站長經驗分享不相干的文章,違者砍文)

版主: 版主管理群

回覆文章
chiouss
竹貓忠實會員
竹貓忠實會員
文章: 1741
註冊時間: 2002-11-29 18:19

[分享]MySQL 4.1+ 的轉碼方式

文章 chiouss »

從 MySQL 4.0 之前的版本升級到 MySQL 4.1 會碰到兩個很常見的問題,一是 password hashing 更動導致舊的 mysql client 沒辦法登入新的 server,這個問題可以參考小弟 blog 或是站內其他網友的討論解決。

另外一個問題比較讓人頭疼,就是 character set 的問題。很多人的資料內容莫名奇妙的被轉來轉去,到最後內容就炸光光了。包括我在內,有很多人都是因為升級上去然後發現內容怪怪的,又手賤去改 collation,然後原本還會正常的編碼就被一直轉來轉去,到最後就整個掰掰謝謝惠顧了。所以趁機提醒還沒升級要打算升級的人,升級前千萬要記得備份你的資料庫!

回到正題,新的 MySQL 多了幾個環境變數來定義 charset,character_set_client, character_set_connection, character_set_database, character_set_results, character_set_server, character_set_system。MySQL 會把使用者的輸入做 character_set_client -> character_set_connection 的轉換 (把輸入的內容當成是 client 的編碼方式,然後轉換成 connection 的編碼),輸出則是依照 data 的 charset (MySQL 可以自訂各 table 的 charset 和 collation) 轉換成 character_set_result 來輸出。而一般我們加上

代碼: 選擇全部

SET NAMES utf8;
這段 (不管是直接加在 msql_connect 後面或是直接加在 my.ini 裡面) 為的是把 client, connection, result 這三個變數設定成 utf8,配合上原本的 UTF8 HTML 才會達到我們的目的,就是這麼一回事。為什麼要特別指定呢?因為不特別指定的話這幾個變數 default 值是 latin1,把 utf8 被當成 latin1 處理會把很多中文字給弄爛,所以網頁和 MySQL 要都設定成 utf8 才不會有問題出現。

明白這件事情了以後,我們可以在程式裡面利用 MySQL 做 charset 的轉換,資料庫裡面可以都放 utf8 的內容,但是在 I/O 上轉成 big5 (或是其他 charset) 來達到我們的目的,而不必像之前一樣另外用 iconv 來轉換。
chiouss
竹貓忠實會員
竹貓忠實會員
文章: 1741
註冊時間: 2002-11-29 18:19

文章 chiouss »

因為弟的文筆很差,所以上面那篇很有可能會讓人看不懂。有問題的人可以盡量問,如果想要看原文的資料的話建議看 MySQL Manual 的 Chapter 10 這部份。

我在 blog 上面有寫一小段筆記,或許有人認為看這個就可以明白也說不定?歡迎參考 ^^
donald
星球普通子民
星球普通子民
文章: 1
註冊時間: 2006-05-29 13:07

文章 donald »

我有一個問題
如果我之前用phpbb2.0.17版(應該是big5)
現在要把sql4.0x升級到4.1x
不希望改之前phpbb的資料(還是用big5)
有辦法更改sql4.1x的設定來達成嗎???
chiouss
竹貓忠實會員
竹貓忠實會員
文章: 1741
註冊時間: 2002-11-29 18:19

文章 chiouss »

donald 寫:我有一個問題
如果我之前用phpbb2.0.17版(應該是big5)
現在要把sql4.0x升級到4.1x
不希望改之前phpbb的資料(還是用big5)
有辦法更改sql4.1x的設定來達成嗎???
首先,一定要把資料存成 sql 丟出來,因為直接 upgrade 的話都會被當成 latin1 的。然後請參考有關 my.ini 的修改方式設定好 mysqld 的 default-charset 為 Big5,再把之前匯出的 sql 匯入。最後請參考其他轉 utf8 的文章裡頭方式,看是要用 init_connect 還是修改 includes/mysql4.php 的方式在連線時先輸入 'set names big5;'。用 Big5 的 phpBB 還需要做多國語系修正,請自己處理。
StickyKid
竹貓忠實會員
竹貓忠實會員
文章: 1019
註冊時間: 2003-01-31 10:32
來自: Taichung, Taiwan
聯繫:

文章 StickyKid »

歐... 亂入一下
我的作品被人拿去當頭像了
好爽 :mrgreen:
Helvetica is a feature-length independent film about typography.
chiouss
竹貓忠實會員
竹貓忠實會員
文章: 1741
註冊時間: 2002-11-29 18:19

文章 chiouss »

StickyKid 寫:歐... 亂入一下
我的作品被人拿去當頭像了
好爽 :mrgreen:
哈!原來您是圖像的正主啊! :Q
那可不可以跟你伸其他類似的圖形阿 :Q
--
這頭像我是在 komica 上面看到的
回覆文章

回到「站長交流」