首頁 > 資料庫 > 將 MySQL 4.0 的資料轉至 MySQL 5.0

將 MySQL 4.0 的資料轉至 MySQL 5.0

2006年1月2日 jaceju 發表評論 閱讀評論

我在公司的 MySQL 4.0 + phpMyAdmin 2.7.0 pl2 中把資料用 SQL 格式一次匯出,想轉到另一台主機的 MySQL 5.0 上,結果試了 UTF-8 、 BIG5 、 latin1 等等,都無法順利將資料匯入 (許功蓋的問題) 。結果改用 binary 格式後就成功了,特此記之。

補充:看了 axis 的回應,我要特此聲明一下,這個方式我測過只適用我們公司,其他環境是否是一樣的做法,我不能確定!因為這些匯入匯出的方式和 mysql 的字元校對、 client 和 server 端的預設編碼還有 phpMyAdmin 的 Language 設定都有很大的關係,這些有機會我再做一次完整的說明。

Categories: 資料庫 Tags:
  1. 2006年1月4日10:35 | #1

    原來是 big5 的資料?

    有沒有試過先把資料轉成 utf8 然後再去匯入?

  2. jaceju
    2006年1月4日11:34 | #2

    試過了,都有問題。

    phpMyAdmin + MySQL 4.0 轉出許功蓋時會變成:「許\功\蓋\」。

    所以用 utf-8 … 不行。雖然先把匯出的 SQL 轉成 utf-8 ,但因為「反斜線」部份會造成 SQL 指令錯誤,必須一個一個去濾掉,不過太麻煩,不符合我偷懶的個性。

    big5 … 也不行, big5 這個土生土長的台灣人雖然看得懂中文字,但是「反斜線」這個拖油瓶一樣會造成 SQL 指令錯誤。

    latin1 … 可以,但是存進去的中文字已經變問號,因為 latin1 這個喝洋水的不認得中文字。

    binary … 可以, MySQL 5.0 會完整的把資料放到對應的欄位,如果資料庫「校對」正確的話,那麼中文就會 OK 。

  3. Mao
    2006年1月6日01:00 | #3

    最近剛好在上MYSQL的課
    老師說到my.ini的mysqld加上一行
    default-character-set=big5或utf8
    就可以請許先生回家吃自己了

  4. jaceju
    2006年1月6日09:03 | #4

    是沒錯,加上 default-character-set=big5 是可行的做法。但是要注意一點,有些主機商並沒有這樣設定,又或者舊有的資料仍然不是採用上面的字元儲存,這些你還是得考慮進去。

    還有設定 default-character-set=big5 之後,在 PHP 上開發時你就得更注意 magic-quotes 所帶來的影響,因為像是 PEAR::DB 或是直接使用 mysql_* 函式所開發的程式,當你用 addslashes 或 stripslashes 時,都要小心許先生會把你吃垮。

    其實解決的方式很多,已經有很多高手提出來了,所以這裡我就不再多說囉。

  5. axis
    2006年2月17日23:01 | #5

    所謂的成功,只是暫時的成功,真正的問題還在後面

    從mysql4.0匯出的資料表 是latin1的編碼,所以說latin1不認識中文字是錯的,
    事實上在mysql4.0以前,不管是用big5還是utf8,存入資料庫都是latin1

    因此再匯入mysql4.1或5時,要選latin1的格式,就可以了

    但是當你再重4.1或5的mysql匯出備份,再匯回來時,就會發現一定失敗

    試試便知:)

  6. jaceju
    2006年2月17日23:52 | #6

    其實我的說法有點不負責任,因為這種做法只適用在我們公司。

    我也清楚 mysql 4.0 以前是用 latin1 ,不過我們公司的 mysql 有做過不一樣的設定,這點我並沒有寫出來。

    其實這些匯入匯出和 mysql 的字元校對、 client 和 server 端的預設編碼還有 phpMyAdmin 的 Language 設定都有很大的關係,我也是弄了很久才搞懂。

    改天寫個比較完整的說明好了,畢竟這種不負責任的寫法有點糟糕。

  7. 2006年2月18日18:55 | #7

    >事實上在mysql4.0以前,不管是用big5還是utf8,存入資料庫都是latin1
    是這樣說沒錯,但是事實上是有點點怪。
    應該是說 4.0 以前MySQL 根本不管你進來的是什麼編碼,反正就把資料存進資料庫就對了。

    4.0 以前進去的 big5 資料,不會因為他是 latin1 語系,dump 出來就變成 latin1,會仍然還是 big5 。是 utf8 進去的,也還是 utf8 出來。

    4.0 倒出來的資料回不去 4.1 or 5.0 ,大部分還是出在 『許功蓋』上∼

  8. jaceju
    2006年2月18日19:12 | #8

    呵呵,其實大家所圍繞的問題點都是對的,改天我來個總整理,再讓大家看看我的作法是不是正確的,屆時再來討論看看。

    因為 MySQL 的編碼真的會整死人。

  1. 目前尚無任何 trackbacks 和 pingbacks。

Spam Protection by WP-SpamFree