Mysql 4.1中文亂碼的處理與解決之道

Mysql 4.1中文亂碼的處理與解決之道

要讓 Mysql 4.1正確顯示中文最簡單的方法就是全程使用 utf8,從網頁到連線到資料庫等,而my.ini的設定如下:

[mysqld] default-character-set=utf8

#settings for clients (connection, results, clients)
[mysql] default-character-set=utf8

其中 [mysqld] 是設定 mysql啟動時要採用的語系,而[mysql]則是通知外來的連線client(例如php頁面或 flash 程式)要使用何種語系設定。
這個設定方法對一般的開發工作非常適用,但有個小缺點,就是當使用一些open source php程式時(尤其是英文寫的程式),如果這些程式語法還停留在mysql 4.0時代,那上面的設定就會導致中文顯示變的怪怪的,最明顯的情況就是大部份中文都顯示的出來,但少部份會變成 方塊型+問號 的亂碼,例如「裏」這個字幾乎是穩死。
這種情況在 drupal 與 gregarius(一個php rss reader) 上見過,經過一番debug才發現了上述原因,後來終於找到解決方法。

最簡單的方式就是不要下面這段:

[mysqld] default-character-set=utf8

拿掉這段後會讓mysql 啟動時停留在預設的latin-1語系,這樣會讓大部份英文程式都很快樂,而要使用utf8中文的人,只要記得建資料庫時將它設成utf8,然後保留 [mysql] 這段設定,讓中文程式正確的使用utf8與它溝通即可。
經過測試:這樣改良後的設定,使用常見的英文php軟體(如wordpress, drupal, OSCommerce, gregarius)都沒問題,而開發要用的 flash – amfphp – php – mysql 黃金組合也同樣ok。