想請教各位先進:
我使用 CentOS 架設伺服器,Apache 2.0.52, PHP 4.3.9, MySQL 4.1.12。
為了讓資料庫中的資料都是 unicode ,輸出入都要沒有問題,所以修改了 my.cnf 中的一些資訊:
[mysqld]
init_connect='SET NAMES utf8'
default-character-set=utf8
default-collation=utf8_general_ci
[mysql]
default-character-set=utf8
這些原則上是之前安裝 LifeType 時上網找資料綜合的,本來都沒有用 phpMyAdmin ,後來為了驗證也安裝了,看起來資料都正常。
我安裝測試了 Drupal 4.7, CivicSpace 0.8.4alpha2(因為要測試它那幾個特殊的模組),結果發現 Drupal 4.7 沒有問題,而 CivicSpace 對中文某些字似乎會出現問題,例如“及“這個字,會造成顯示亂碼,進資料庫看也是一樣。
想要請教大家的是:
1. 安裝 Drupal,為了讓資料庫純粹都是 utf8 的文字編碼格式,上面 my.cnf 中的設定是否必要?
2. 我猜想 CivicSpace 應該是因為它的自動安裝程式,不知道是否有人之前安裝過?會不會出現相同的問題呢?
3. 我搞不清楚使用 utf8_general_ci 與 utf8_unicode_ci 之間的差別,對資料庫以及 Drupal 運作有沒有不同?
如果有先進在 Linux 上安裝 Drupal 以及與中文萬國碼設定相關的經驗,煩請指教一下。
我的經驗是,如果是4.6以下或是衍伸出來的版本,加上那些設定是必要的
原因是因為4.7的版本在database/database.4.1.mysql裡面多加了這樣的語法
所以4.7基本上不需要在my.ini做那些設定
除非額外裝的module寫的create table語法中,沒有包含這樣的敘述
不然應該是沒問題的
另外,其實除了調整my.ini還有其他替代的做法
如果一個mysql裡面有多語言的db,那就不適合用my.ini去做全域的設定
替代的方式為在 include/database.mysql.ini找到function db_connect
加上三行mysql的設定
這樣的好處是在mysql 4.1以上的版本,可以一個database用多種語言集
但壞處是每一個connection都要做那一次設定
非常有用的資訊
感謝 jimmy 的詳細解說,大致上可以搞清楚之間的差別了。
這樣看來,還是應該在新增模組之前檢查一下它的語法,萬一它指定了其他的編碼方式,就有可能造成差異。
但是除了在新增資料庫的部份之外,是否還有其他地方有可能造成編碼上的失誤呢?
由於我是在全新的機器上修改過 MySQL 的設定後,還在 Linux 中進入 mysql> show variables like '%character%'; 檢查過,才開始安裝 CivicSpace 與 Drupal 的,而 CivicSpace 卻發生了文字編碼上的部份錯誤,我還沒有檢查過個別的檔案,但看來其中一定還有地方有問題,我研究過之後再報告。
看看CivicSpace的資料庫編碼,是不是utf8_general_ci?
我裝Drupal 4.7、用phpmyadmin建立資料庫時,有時沒有設定資料庫編碼,結果在新增模組的資料表時,有時就會變成latin1_general_ci,然後就亂碼...
對,third
對,third party提供的模組,很多時候並不會預設utf-8編碼
因為mysql預設是latin1,對英語系的網站而言根本沒有影響
這也是主流語言的霸權啊!