您在這裡

MYSQL從原來的 4.0.x 升級為 4.1.x

Drupaler's 的頭像
Drupaler (未驗證) 在 2007-06-22 (週五) 15:42 發表

我的虛擬主機商通知我,明天要搬移到新主機,連同MYSQL要從原來的 4.0.x 升級為 4.1.x
沒碰過這種情形,想請問是不是虛擬主機搬移完,MYSQL升級後,要不要跑一遍update.php呢?

freealan's 的頭像

尷尬了!我不知道要選哪一個?

移到新的主機後
伺服器版本: 4.1.22-standard
# MySQL 文字編碼: UTF-8 Unicode (utf8)
# MySQL 連線校對: utf8_unicode_ci

請問語系碼要選哪一個呢?

freealan's 的頭像

>注意要mysqldump出來,到時再import進去,且語系碼要選擇對

我現在要 import 回去,語系碼,請問要選latain1嗎?
還有要先殺掉原來的資料庫嗎?

freealan's 的頭像

虛擬主機商的回覆:

>一般程式都是直接使用latin編碼寫入資料庫, 我們並無法幫用戶轉碼
>你的程式應該也是用latin編碼寫入資料庫
>我們之前的處理方式都是統一幫用戶上傳舊版的phpmyadmin

結果他好像上傳了舊版的phpmyadmin,目前亂碼的問題就解決了。
謝謝大家囉:)

雖然解決了,我還是回應一下
較正確的作法其實是在import進去時無論連線校對還是字元編碼,都選unicode_general_ci

/************************************************
* 你的回饋,讓Drupal越來越茁壯 * Drupal社群越茁壯,你就越有力量 *
************************************************/

--
from open mind to open source~

之前以為好了,是因為還指向舊的主機。所以是幻覺。
新主機還是亂碼。而且我查了一下資料才知道mysql 4.0-> 4.1問題大條了

以下是主機商的回覆:

因為虛擬主機還有其他用戶, 所以並無法直接在主端做設定mysql用戶都用utf8
至於dump還原資料庫, 會遇到
ERROR 1062 (23000) at line 7291: Duplicate entry 'http://xxx.xxx/short_story?sort=asc&order=??&page=4' for key 1
本來是想開啟.sql做修正, 然後在做還原, 可是你的資料庫好像存在兩種編碼
有正常的中文, 也中文亂碼, 這樣就無法做儲存及還原了
你在根目錄下載 backup.sql 看或修正

主機商很友善。目前解決的方法,主機商幫我移到一個 mysql 4.0的主機
暫時就是維持之前的狀況

mysql 太複雜了,看半天,得找時間研究一下@@

mysql從4.0 => 4.1其實我做過n次drupal的升級從來沒問題
我猜你的問題在於你第一次從4.0 => 4.1的時候,沒有在4.1的那裡指定連線校對和表格的編碼
而在4.1之後正式run的時候,新增的資料又變成亂碼了

建議你發揮一下研究精神
你可以下載apperv裝在自己電腦中,現在大多是mysql 5.0,與4.1沒太多不同
在自己本機端匯入在主機商匯出4.0的sql檔有沒有問題
有問題的話,在phpmyadmin匯出sql檔時,記得把「SQL相容模式」選4.0
在匯進去時,記得把連線校對預設為unicode_general_ci

/************************************************
* 你的回饋,讓Drupal越來越茁壯 * Drupal社群越茁壯,你就越有力量 *
************************************************/

--
from open mind to open source~

跟你混著貼文章沒有關係吧!

mysqldump 時有沒有指定 -default-character-set=latin1 ? 看你的描述,原本 MySQL 4.0應該是 latin1 編碼

可以用搜尋引擎找一下 MySQL 編碼或 MySQL升級的問題,網路上有很多討論跟心得。

--迎著風,線放鬆,風箏自然上天空--

--迎著風,線放鬆,風箏自然上天空--

謝謝你的回應!無奈,虛擬主機不支援SSH,不能使用「liaozI」,所提供的方法

mysqldump -u root -p --default-character-set=latin1 drupal > drupal.sql
sed -i -e 's/latin1/utf8/g' drupal.sql
直接在phpmyadmin刪掉,並新增一個新的資料庫
mysql -u root -p drupal < drupal.sql

我再找找看資料...看到一個Modules
http://drupal.org/project/backup
好像不太適合@@

假設原有的 MySQL 4.x.xx (latin1) 已升到 4.1.xx or 5.x.xx (utf8),如果之前沒在舊版的 phpmyadmin 先匯出,再倒入新版的話,失敗是可以預期的。

此時用 shell 登入主機,我再把上面的語法改進一下..

Step 1:
把 drupal 資料庫匯出 (這是在昇級後的資料庫中操作的)。

mysqldump --user=username --password=password --default-character-set=latin1 --skip-set-charset drupal > drupal.sql

Step 2:
把匯出的資料庫數據中的字集設定,latin1 替換成 utf-8,另存為 drupal_utf.sql (保留舊的 drupal.sql,輸出新的 drupal_utf.sql,有備無患)。

sed -r 's/latin1/utf8/g' drupal.sql > drupal_utf.sql

Step 3:
砍掉舊的 drupal 資料庫,再建立一個以 utf8 字集和連線校對的新 drupal 資料庫。

mysql --user=username --password=password --execute="DROP DATABASE drupal; CREATE DATABASE drupal CHARACTER SET utf8 COLLATE utf8_general_ci;"

Step 4:
把處理好的 drupla_utf.sql 倒回新的 drupal 資料庫。

mysql --user=username --password=password --default-character-set=utf8 drupal < drupal_utf.sql

如此就擺脫亂碼的困擾,如果原有的字集是 big5, gb2312, bgk 要轉成 utf8,把上述 Step 2 中的 latin1 改一下也可以。