1 頁 (共 2 頁)

[問題] MySQL 4.0升級至4.1,有關utf8資料的問題

發表於 : 2005-11-26 17:05
Loki
最近想把MySQL從4.0升級至4.1版
phpBB已經UTF-8化
但之前升級MySQL都一直失敗
因為換過去後有部份資料還是亂碼\r
現在是有找到解決辦法
沒有了編碼問題
反而是當我想要restore回去時
會出現 Bus error (core dumped) 的訊息\r
然後回去看資料庫會發現資料表少了一大半

先簡述一下我的作法好了
1. 先從原本的MySQL 4.0把資料庫dump出來
mysqldump -u root -p --opt --quote-names db_name > db_name.sql

2. 接著修改db_name.sql的內容
在開頭加入\r
SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;
然後將每個table後面的 TYPE=MyISAM;
改成
ENGINE=MyISAM DEFAULT CHARSET=utf8;

3. 接著換成MySQL 4.1
先建一個新資料庫,校對為utf8_general_ci
再把資料restore回去\r
mysql -u root -p db_name < db_name.sql

如此一來亂碼的問題是解決了
但是restore的資料並不完全\r
像這樣子
圖檔
正常應該有30個table
但restore只剩下11個
其中像phpbb_posts_text還是空的 = =

請問應該要如何修正呢?
謝謝

發表於 : 2005-11-26 18:59
flower
您可以在執行 mysql -u root -p db_name < db_name.sql
這步驟之前 先打開 db_name.sql

我想會產生 core dumped 導致沒有還原完全的原因是\r
有許多的 \'
如果您只是由 big5 轉成 utf8 一般是無法直接導入的 有許多的衝碼字

例如: 如果您有一個文章內容只有成功兩字.....那導出後 sql 裡面的那段應該是 '成功\\'

但這在導入時只會變成 '成功' 就沒有結尾的單引號

您要手動修改 把 '成功\\' 改成 '成功' 然後再導入\r
有這種情況的都必需要修正 通常是在 單引號的結尾部份比較會出問題

之前把把論壇內所有文章 (70000篇左右) 由 big5 轉換成 utf8 光修改這部份就花了一個小時 要改的地方還真不少..... 把這種情況都修正後 應該就能導入了

發表於 : 2005-11-27 02:16
brentsu
看到要搞定 7 萬篇文章.... 看樣子我早點放棄之前安裝的【多國語系】的 MOD 是對的,乾脆一次就直接裝上 UTF-8 免除無窮後患....

嗯~~話也不能說得太早,搞不好改用 UTF-8 之後又會出啥問題,畢竟這次 2.0.18 是竹貓首次正式發佈,還有很長的路要走呢~~ phpBB 加油~~

發表於 : 2005-11-27 12:02
右手
ultraEdit有多重檔案取代功能\r
不用開啟檔案一個一個改\r
看圖
不然用EmEditor也可以
EmEditor5可以開比較大的檔案
http://www.emeditor.com/jp/

發表於 : 2005-11-27 13:39
flower
嗯 我當初是用 vim 取代和修改的 平常用上手了 直接就想到利用這個
vim 可以轉換編碼為 utf8 也有 sql 的語法顏色 所以蠻好改的 單引號的部份有錯看顏色就知道
我在匯出和修改前 先把 wordlist 和 wordmatch 兩個資料表清空 那兩個佔用了一半的容量
刪除完大概還剩 70 mb 勉強還可以編輯......
關於 vim 的設定 您可以看下面的網頁: 點選此處

發表於 : 2005-11-27 15:21
Loki
flower 寫:嗯 我當初是用 vim 取代和修改的 平常用上手了 直接就想到利用這個
vim 可以轉換編碼為 utf8 也有 sql 的語法顏色 所以蠻好改的 單引號的部份有錯看顏色就知道
我在匯出和修改前 先把 wordlist 和 wordmatch 兩個資料表清空 那兩個佔用了一半的容量
刪除完大概還剩 70 mb 勉強還可以編輯......
關於 vim 的設定 您可以看下面的網頁: 點選此處
不知是那個網頁好像寫錯了
還是vim又有改了
語系設定是 set enc=utf8 才對
而不是set ec=utf8
language utf8這行vim好像也不對
會回應 E197: Cannot set language to "utf8"
這樣子一來Windows下的vim介面會全是亂碼\r
若改成
lang mes zh_TW.UTF-8
這樣子vim的訊息就OK了
但介面還是亂碼\r

而設了set enc=utf8
在FreeBSD下看table的內容也還是亂碼(用putty連的)
不過該亂碼看起來不同了
是一堆怪字加<81><9d>等等的組合
不過這也許是FreeBSD的console沒設好吧\r
因為在Windows上用gvim是OK
再研究看看

順便再問一下
ultraEdit有支援SQL語法的高亮度顯示嗎?
我用的11版好像沒有
要另外掛入嗎?

發表於 : 2005-11-27 17:09
右手
ultraEdit要加字表檔才支援高亮\r
這裡抓
圖檔

發表於 : 2005-11-28 02:15
Loki
現在還有令我不解的是\r
若把dump出來的資料restore回MySQL 4.0沒有問題
剛才試了一次是OK的
但是restore至MySQL 4.1版一定會出狀況
這到底是為什麼呢?

發表於 : 2005-11-28 10:26
右手
你dump出來的資料是不是沒有轉碼呢

發表於 : 2005-11-28 12:58
Loki
右手 寫:你dump出來的資料是不是沒有轉碼呢
我的資料原本是big5
是去年轉成utf8
轉成utf8之後在MySQL 4.0之間dump和restore都沒問題
但就是在MySQL 4.1有狀況
現在4.1上的編碼問題已經解決了
就剩core dumped這個部份

發表於 : 2005-11-28 13:08
右手
那你能提供你dump出來的資料嗎
我主機上面有裝4.0.26 4.1 5.0.15
我幫你測試看看,不方便直接貼出來可以用PM的.

發表於 : 2005-11-29 00:38
Loki
今天又重新在別的機器上作了測試
因為有前輩指出會有core dumped這個訊息可能不是資料本身的問題
於是找了另一台機器
再安裝一次MySQL 4.1.15進行測試
發現幾乎是可以正常restore
但是又有新問題了
出現ERROR 1062 (23000) at line 446: Duplicate entry '?��憟踝?憟賣??�蝬���嚗��乩��閬��� for key 1
指有一個不能重覆資料的資料意圖輸入資料庫
但是奇怪的是
若我不修改sql檔而直接restore至MySQL 4.1
雖然是可以成功匯入\r
但編碼是錯的(當然)
而restore至MySQL 4.0當然也沒有問題
所以必須要在sql檔中加入一些的述敘才行 (SET NAMES utf8; 等等)
可是加了又會出狀況
唉…\r
真不知道該如何解決

發表於 : 2005-11-29 19:11
Loki
右手 寫:那你能提供你dump出來的資料嗎
我主機上面有裝4.0.26 4.1 5.0.15
我幫你測試看看,不方便直接貼出來可以用PM的.
您好
我已經PM給您了
就請您幫我看一下
謝謝

發表於 : 2005-11-29 20:08
Loki
這次的問題也許和資料本身有關係吧\r
因為剛才又試著把blog和cpg相簿的資料庫從MySQL 4.0 dump出來
再匯入MySQL 4.1
同樣是utf8的資料
用相同的方法
結果是正常的
但是phpBB匯入去就是有問題= =

mysql4.1在phpmyadmin下看到的中文字亂碼的解決方法

發表於 : 2005-11-29 22:00
shstw
mysql4.1在phpmyadmin下看到的中文字亂碼的解決方法

目前僅在ununtu5.10測過(php5.05、mysql4.1.12、phpMyAdmin 2.6.4-pl1),其他平台請有需要的人測試,我想應該沒問題吧!因為這只是phpmyadmin的問題而已。

解決方法一、
不要裝phpmyadmin2.6以後的版本,改裝phpmyadmin2.5.7
只不過用舊一些的版本,心理不太舒服!

解決方法二、
我是用phpmyadmin2.6.4,不過有兩個地方要修改:

1.
在phpmyadmin/libaries/select_lang.lib.php
第171行,將'zhtw-big5' => array('zh[-_](tw|hk)|chinese traditional','chinese_traditional-big5', 'zh-TW') 註解掉
,在其下加入 'twbig5-utf-8'=> array('zh[-_](tw|hk)|chinese traditional','chinese_traditional-big5', 'zh-TW'),
主要就是把zhtw-big5改成twbig5-utf-8,因為phpmyadmin2.6遇到mysql4.1沒有看到utf-8就不理你,所以只好騙他嘍!


2.
在phpmyadmin/libaries/select_lang.lib.php
第240行,將'big5' => 'big5', 註解掉,在其下加入'big5' => 'latin1',
也就是將big5對應到latin1的意思!
第257行,將'utf-8' => 'utf-8', 註解掉,在其下加入'utf-8' => 'latin1',
也就是將utf-8對應到latin1的意思!

如下:

// MySQL charsets map
$mysql_charset_map = array(
//'big5' => 'big5',
'big5' => 'latin1',
'cp-866' => 'cp866',
....
....

//'utf-8' => 'utf8',/
'utf-8' => 'latin1',

注意導入資料庫時,編碼校對一定要選擇:

MySQL 連線校對:latin1 下的 latin1_general_ci
建立新資料庫 校對:latin1 下的 latin1_general_ci