在
Mysql3.x版中,表格使用 ISAM 類型會依平台而使用某些較互不相容的字元,這樣的目的是為了加快在各個平台上的存取速度,但是相對地也就犧牲了平台轉移性。
先前我接的 case 中,因為平台是 linux,所以在把資料庫轉到自己的 windows 上時就出現了平台轉移性的問題。對於容量較小的表格來說,直接存取還不至於有什麼大問題,但是對檔案容量較大的表格,就會出現完全存取不到的情況。表格內還是有內容,只是讀不到。在找遍所有相關資料和詢問後一直都沒有結果,就這樣過了一個多月。
不過,後來在不斷嘗試後,找出了解決的方法。
- 先把 linux 裡的 yourdatabase 資料夾找出來,複製到 $mysqlhome$/data 下。假設表格名稱是 test,那麼把 yourdatabase 資料夾中的 test 表格檔案先放到其他地方(共有三個檔案)。
- 在 mysql 中 create 欄位和型態與 test 一樣的表格 (記得表格類型要指定 ISAM,因為 mysql 在windows下預設的表格類型是 MYISAM)。
- 把 test.ISD 複製到 yourdatabase 資料夾裡,用 isamchk -v -l -r ..\data\yourdatabase\test。執行一次可能還會有問題,但執行個兩三次左右應可順利把表格檔案修復完成,這裡記得 mysql 要用 mysql-max 方法來執行,除此之外都將無法正常修復。
- 一切搞定後,可以到 mysql 裡把表格類型轉換成 MYISAM,這樣就不用擔心平台轉移的問題了。