1 頁 (共 1 頁)

[心得] 與MySQL 4.1的奮戰

發表於 : 2005-11-28, 21:29
Loki
這兩天都在作utf8的資料在MySQL 4.0轉換至4.1的測試
因為MySQL 4.1對utf8的支援較完整
但也在版本轉換上產生編碼的問題
昨天經過一番的測試後是解決了編碼問題
但是卻發生restore不完全的狀況
會出現bus erros (core dumped)的錯誤訊息
於是回去檢查了一下sql
花了一小時的時間去修正table中一些跳脫字元的問題
但還是無解

今天又重新在別的機器上作了測試
因為有前輩指出core dumped這個訊息可能不是資料本身有問題
(而且編輯器上的顏色不一定準)
於是找了另一台機器
再安裝一次MySQL 4.1.15進行測試
發現幾乎是可以正常restore
但是又有新問題了
因為MySQL 4.1要對各table指定連線校對
因此必須在從MySQL 4.0 dump出來的sql檔中加入一些敘述
才能讓MySQL 4.1知道你的資料庫的正常編碼為何
所以我在sql檔開頭的部份加入

代碼: 選擇全部

SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8; 
然後把各table的 TYPE=MyISAM; 改為 ENGINE=MyISAM DEFAULT CHARSET=utf8;
但是卻出現Duplicate entry的問題
指有一個不能重覆資料的資料意圖輸入資料庫
但是奇怪的是
若我不修改sql檔而直接restore至MySQL 4.1
動作是OK的
但編碼是錯的(當然)
所以必須要加入上述的述敘才行
可是加了又會出狀況
唉…
還真是惱人呀
再研究看看

發表於 : 2005-11-29, 22:49
Loki
似乎只有phpBB的資料庫會出問題
今天試了把pLog和cpg相簿的資料匯入MySQL 4.1
同樣是utf8的資料
同樣的匯入動作
卻一點事也沒有 = =

發表於 : 2005-11-30, 21:14
Loki
今天終於解決問題了
因為發現到轉移Blog和相簿的資料庫都沒問題
但是phpBB就是會出狀況
所以應該是資料本身的問題
經過竹貓星球的Darkhero幫忙之後
原來是舊版的 search_wordlist 的 primary key 長度不足...所以在匯入 mysql 4.1 的時候.
由於utf8等的轉換加上字串長度計算不同的關係,導致該表格資料 import 會發生 原來的資料超過欄位長度,過長的部份被截斷,而剩下的部份則產生重複
所以才會有duplicate entry訊息
只是自行去修 search_worldlist 這個table的scheme
把長度加大就可以了