PDA

查看完整版本 : [求助] 資料庫轉換編碼好像怪怪的


seesawgame
2007-12-26, 01:24 PM
小弟有一個站 xoop 1.3.10 使用 big5 編碼,轉到現在的 dreamhost 主機己超過一年時間
但最近想把它升級成 xoops 2.x UTF-8 編碼或是 VBB 3.6.x UTF-8 版本都有問題
發現原來倒出來的 name.sql 檔中,好像檔案編碼己經就怪怪的了
(39, 38, 22, 5, 1030753421, 1, '192.168.1.50', 'Re: 穡穢織繕瞻璽簞??D癒I', 0, 0, '', 1),
(40, 38, 22, 5, 1030766761, 100, '61.224.129.147', 'Re: 穡穢織繕瞻璽簞??D癒I', 0, 0, '', 0),
(41, 40, 22, 5, 1030777503, 1, '192.168.1.50', 'Re: 穡穢織繕瞻璽簞??D癒I', 0, 0, '', 1),
(42, 35, 13, 1, 1030780097, 108, '61.230.202.122', 'Re: 簡?穢籀', 0, 0, '', 0),
(43, 41, 22, 5, 1030876390, 100, '61.224.128.224', 'Re: 穡穢織繕瞻璽簞??D癒I', 0, 0, '', 0),
(44, 43, 22, 5, 1030882645, 1, '192.168.1.50', 'Re: 穡穢織繕瞻璽簞??D癒I', 0, 0, '', 1),
(45, 0, 23, 5, 1030883313, 1, '192.168.1.50', '?繹穢籀Antique翹?繒?穠繙穠穩繙t', 0, 0, 'icon16.gif', 1),
(46, 45, 23, 5, 1030982038, 1, '192.168.1.50', 'Re: ?繹穢籀Antique翹?繒?穠繙穠穩繙t', 0, 0, '', 1),
(47, 42, 13, 1, 1031112940, 131, '218.187.18.165', 'Re: 簡?穢籀', 0, 0, 'icon25.gif', 0),



以下是主機環境的資料,不知那位大大能幫小弟解決到底是出了怎樣的問題呢?!

http://img184.imageshack.us/img184/1650/13hf4.png


http://img184.imageshack.us/img184/3107/23zn9.png

wufenpu
2007-12-26, 01:37 PM
這個問題出在一開始沒有設定資料表的連線校對是big5_chinese_ci,
所以資料都是以latin1_swedish_ci存入Mysql的,
至於眼下有沒有辦法由latin1_swedish_ci--->big5_chinese_ci得請教高手了.

seesawgame
2007-12-26, 01:41 PM
原來是這樣啊,感謝五分埔兄
不過有人可以解 「latin1_swedish_ci--->big5_chinese_ci」這個問題嗎?!

青狼
2007-12-26, 02:43 PM
這是使用phpMyAdmin備份的嗎?如果是.改用xoops本身的備份功能.

some
2007-12-26, 04:19 PM
希望我這篇文章對您有些幫助:
http://www.adsenseor.com/mysql/256.html

wufenpu
2007-12-26, 04:45 PM
Some的這篇文章寫的真清楚,
很多被mysql 4.x編碼問題整過的人都說 mysql_query("SET NAMES 'utf8'")是血淚換來的教訓.

seesawgame
2007-12-26, 06:07 PM
希望我這篇文章對您有些幫助:
http://www.adsenseor.com/mysql/256.html

some 大,我看完了
但是資質不好,實在看不出要怎樣解決這個問題 ~embarass:

cool
2007-12-26, 06:08 PM
發現原來倒出來的 name.sql 檔中,好像檔案編碼己經就怪怪的了


解決了嗎?

不然;你先去找到EmEditor編輯工具,開啟name.sql重新編碼讀取(選big5)。
再以utf-8格式另存新檔。

直接由phpMyAdmin內更改設定載入,二分鐘搞定。
升級的 xoops 2.x UTF-8 編碼或是 VBB 3.6.x UTF-8 版本,無需動它。

現在沒這環境,晚些回家再抓圖說明設定。

seesawgame
2007-12-26, 06:20 PM
解決了嗎?

不然;你先去找到EmEditor編輯工具,開啟name.sql重新編碼讀取(選big5)。
再以utf-8格式另存新檔。

直接由phpMyAdmin內更改設定載入,二分鐘搞定。
升級的 xoops 2.x UTF-8 編碼或是 VBB 3.6.x UTF-8 版本,無需動它。

現在沒這環境,晚些回家再抓圖說明設定。

跟 cool 大大報告
我試過這個方式了,但因為下載下來的檔案就己經是亂碼了
不過我是用筆記本之類的軟體開它…不知有沒有差別 :XD:

coolki
2007-12-26, 06:24 PM
用PHPMYADMIN出現亂碼的話
可以試試我的這個方法

如果你有cpanel後台的話
直接找他的backup備分資料庫的功能
抓下sql在匯入就可以解決亂碼了

liou
2007-12-26, 06:40 PM
1. 你的資料庫狀況分析:

早期是從:
[論壇] --儲存成BIG5--> [資料] --無校對--> [MySQL4.0資料庫]


目前狀態是:
[論壇] --儲存成BIG5--> [資料] --latin1校對--> [MySQL5.0資料庫]


將來建議要改成:
[論壇] --儲存成UTF8(或Big5)--> [資料] --Utf8校對(或big5校對)--> [MySQL5.0資料庫]

(建議將來都改用 utf8 比較不會出問題)


2.
上述第一階段 [論壇]到[資料] 的儲存模式是由論壇設定的,(請自行翻閱論壇的設定檔)
(一般論壇會偵測你的資料庫是4.0以前或是4.1之後,
4.0之前的就會以big5模式儲存, 4.1之後他可能會多一個項目讓你從big5轉換成utf8,
但是 假如你內部卻用latin1校對方式,論壇並不曉得,一轉換下去 整個論壇都會變成亂碼瞬間毀掉,
所以轉換前,請先備份資料庫, 並且請先確定你的資料庫是否是全部都big5校對再決定轉換.)

3.
第二階段的[資料]到[MySQL資料庫]的儲存校對模式則是由 MySql設定的.(請自行翻閱phpmyadmin資料庫的結構或管理)
(1) 當初 MySQL 4.0以下 是沒有校對模式的.
(2) 升級到4.1~5.0的時候, 你創立資料庫自動被預設為 latin1 校對模式,(而不是選擇big5或utf8)
原本依照正常情況來看, 你當初應該要手動建立 big5資料庫的.


因為大部分創立資料庫都是在Cpanel創立,而Phpmyadmin通常不讓你創立資料庫,
所以建立出來的都是 latin1資料庫, 必須自行手動改成 big5或utf8


以下這個作者寫的,是我看過唯一我能理解的Mysql地球文章,
前半部是寫如何創立一個原始空白的資料庫,就先把它從latin1改成big5或Utf8資料庫,避免以後出錯;
後半部是寫已經把big5或utf8資料給寫到latin1校對錯誤的兩種解決方式:
http://www.winzfree.happyhost.org/mysqlcheck/index.htm



4. 為啥你看到的資料是亂碼:
[論壇] --儲存成BIG5--> [資料] --larin1校對--> [MySQL5.0資料庫]

目前你的[資料] 看到都是亂碼, 表示你從 [MySQL5.0資料庫] 反倒出來的時候,
不是透過正確的latin1校對模式,



5. 至於如何徹底解決
這個我也不是很懂, 我是建議如下啦:

資料庫和論壇檔案 都要備分,
用備份複製出來的資料庫 ,cpanel的 file manage複製論壇所有檔案,
到新目錄去慢慢實驗,不要動用到原來的論壇目錄和論壇資料庫.

(1)
你可以倒出來的時候, 要輸出之前, 校對模式用latin1(或big5都試試),
先設法把資料庫輸出到你的電腦裡,
然後使用 像 EmEditor 這種軟體, 去變更整個檔案從 latin語系變為big5,(讀取latin1 儲存big5)
看看是否亂碼會變回正確的中文.

PS.
這裡我覺得需要交叉比對,
輸出資料庫到電腦的時候 各選 latin1 big5 utf8 三種存檔,
三種存檔 使用EmEditor 各再用 latin1 big5 utf8 三種方式讀取 看看哪一種會變成正確的中文碼,(總共有9種變化...)
然後再以BIG5方式存檔.

(2)
再將上述正確的中文編碼的檔案
修改資料裡面的latin1_swedish_ci 改成你的語系 big5_chinese_ci

(3)
在cpanel建立新空白資料庫 , 在phpmyadmin [管理] 項目中將語系改成用big5校對,

(4)
該空白資料庫[載入],語系選擇 Big5.
這樣子應該就變成標準的Big5資料庫了...


也就是像這位作者寫的 處理方式B 方式...
http://www.winzfree.happyhost.org/mysqlcheck/index.htm


PS.
我上次主機商突然升級資料庫害我措手不及,來不及備份最新的4.0版本的資料庫.
為了這個問題,解到資料庫編碼更加混亂掉完全廢掉,
最後只好拿當初4.0版本的舊資料庫來用,損失了2個月份的留言...

建議你再以Google搜尋: mysql latin1 big5 或是 mysql latin1 utf8
類似這些的,會有一堆文章討論...(不過,我大部分都看不懂...)

---------------------

我也提醒大家,
當Mysql資料庫 4.0 無校對模式,不需要特別注意.

但是 升級到Mysql 4.1~5.0以上,就要注意在cpanel建立新資料庫,會被設定成latin校對這個錯誤.
每次只要建立新資料庫,就一定要記的手動改成utf8或big5,不然以後資料庫的問題會一堆...

seesawgame
2007-12-26, 06:50 PM
你的資料庫

早期是從:
[論壇] --儲存成BIG5--> [資料] --無校對--> [MySQL4.0資料庫]


目前狀態是:
[論壇] --儲存成BIG5--> [資料] --lartin1校對--> [MySQL5.0資料庫]


將來建議要改成:
[論壇] --儲存成UTF8--> [資料] --Utf8校對--> [MySQL5.0資料庫]

liou 兄,感謝您的建議
我也是朝這個方向努力,但是因為不知要怎樣處理 :collapse

cool
2007-12-26, 08:23 PM
不過我是用筆記本之類的軟體開它…不知有沒有差別 :XD:
其他筆記本之類不太清楚,大多無法正常顯示它原資料的編碼字體。

以下是我的方式,你試試看。
1. name.sql 先行備份。
2. name.sql (資料)用EmEditor打開,選big5編碼重新讀取。
http://img509.imageshack.us/img509/2609/13099255gj7.gif

3. 另存新檔→以UTF-8存檔。


phpMyAdmin 載入
原(資料)清空狀態。

1. 進入【管理】→校對:設定為utf8_general_ci
http://img295.imageshack.us/img295/6109/63005937sc1.gif

2. 進入【載入】文字編碼檔案:utf8 / 載入檔案格式 SQL 兼容模式→選取:MYSQL40 or 50 (自己合適版本)
http://img295.imageshack.us/img295/3161/58573941jo0.gif

3. 上傳UTF-8格式 name.sql。

4. 完成。
http://img295.imageshack.us/img295/1118/77065631ym1.gif

some
2007-12-26, 09:14 PM
some 大,我看完了
但是資質不好,實在看不出要怎樣解決這個問題 ~embarass:

您使用舊版的 phpmyadmin 去做資料匯出就解決了.
您查一下您的 phpmyadmin 的IE檢示編碼是不是UTF-8 ?

另外更簡單的方法用mysqldump 出來就好了阿? ~what

seesawgame
2007-12-26, 09:35 PM
當我使用 EmEditor 開啟時,出現下面的錯誤
http://img180.imageshack.us/img180/3474/26tp1.png

cool
2007-12-26, 09:38 PM
當我使用 EmEditor 開啟時,出現下面的錯誤
http://img180.imageshack.us/img180/3474/26tp1.png
不管它,按確定。
再進入這步驟。

http://img509.imageshack.us/img509/2609/13099255gj7.gif

seesawgame
2007-12-26, 09:39 PM
您使用舊版的 phpmyadmin 去做資料匯出就解決了.
您查一下您的 phpmyadmin 的IE檢示編碼是不是UTF-8 ?

另外更簡單的方法用mysqldump 出來就好了阿? ~what

some 兄,我使用 IE 7.0 它的確是 UTF-8 顯示編碼
舊版的 phpmyadmin 跟使用 mysqldump 有相關的教學嗎?! :applaud

seesawgame
2007-12-26, 09:45 PM
不管它,按確定。
再進入這步驟。

試了一下,發現只有部份資料庫的設定部份支援
但其他資料庫內的東西還是亂碼
不知是否與那個「SQL 兼容模式」有關?! 我該選那個選項呢?! ~what

http://img180.imageshack.us/img180/4387/33bp2.png

cool
2007-12-26, 09:55 PM
不知是否與那個「SQL 兼容模式」有關?! 我該選那個選項呢?! ~what

http://img180.imageshack.us/img180/4387/33bp2.png
「SQL 兼容模式」是於載入時,才選取。
輸出.sql時;照一般預設即可。

原始.sql file 用一般筆記本開啟,還是這樣的亂碼字體?

(39, 38, 22, 5, 1030753421, 1, '192.168.1.50', 'Re: 穡穢織繕瞻璽簞??D癒I', 0, 0, '', 1),
(40, 38, 22, 5, 1030766761, 100, '61.224.129.147', 'Re: 穡穢織繕瞻璽簞??D癒I', 0, 0, '', 0),
(41, 40, 22, 5, 1030777503, 1, '192.168.1.50', 'Re: 穡穢織繕瞻璽簞??D癒I', 0, 0, '', 1),
(42, 35, 13, 1, 1030780097, 108, '61.230.202.122', 'Re: 簡?穢籀', 0, 0, '', 0),
(43, 41, 22, 5, 1030876390, 100, '61.224.128.224', 'Re: 穡穢織繕瞻璽簞??D癒I', 0, 0, '', 0),
(44, 43, 22, 5, 1030882645, 1, '192.168.1.50', 'Re: 穡穢織繕瞻璽簞??D癒I', 0, 0, '', 1),
(45, 0, 23, 5, 1030883313, 1, '192.168.1.50', '?繹穢籀Antique翹?繒?穠繙穠穩繙t', 0, 0, 'icon16.gif', 1),
(46, 45, 23, 5, 1030982038, 1, '192.168.1.50', 'Re: ?繹穢籀Antique翹?繒?穠繙穠穩繙t', 0, 0, '', 1),
(47, 42, 13, 1, 1031112940, 131, '218.187.18.165', 'Re: 簡?穢籀', 0, 0, 'icon25.gif', 0),

some
2007-12-26, 09:58 PM
some 兄,我使用 IE 7.0 它的確是 UTF-8 顯示編碼
舊版的 phpmyadmin 跟使用 mysqldump 有相關的教學嗎?! :applaud

去下載舊版的 phpmyadmin來做匯出就解決了.
舊版的phpmyadmin 的檢示編碼是big5, 您用UTF-8的軟體的任何動作都會將字體做UTF-8的編碼.

您再用力看一下我寫的教學就知道了..
其實這麼簡單的東西大家都太複雜化了. 試看看..保證有用.

cool
2007-12-26, 10:34 PM
去下載舊版的 phpmyadmin來做匯出就解決了.
seesawgame是用dreamhost主機,要求主機商裝回舊版本,可能更麻煩吧。

或是有何外在程式,讓他將MySql資料下載本機時,資料不亂碼;且為utf-8格式檔案?

再進行我上述phpMyAdmin 載入設定動作,只需二分鐘。

seesawgame
2007-12-26, 11:25 PM
seesawgame是用dreamhost主機,要求主機商裝回舊版本,可能更麻煩吧。

或是有何外在程式,讓他將MySql資料下載本機時,資料不亂碼;且為utf-8格式檔案?

再進行我上述phpMyAdmin 載入設定動作,只需二分鐘。

這個我在 sea0964 大大的站上有看過相關的文章
http://www.deal13.net/modules/icontent/index.php?page=21

小弟試試後再回報給各位大大了 :XD:

wufenpu
2007-12-26, 11:28 PM
seesawgame是用dreamhost主機,要求主機商裝回舊版本,可能更麻煩吧。


phpmyadmin其實可以自己裝,跟主機商提供的不衝突.

cool
2007-12-26, 11:47 PM
TO:some, seesawgame, wufenpu 我也謝謝您們。
自行安裝舊版本phpmyadmin到主機上,這點剛學到。:XD:

seesawgame
2007-12-27, 10:27 AM
回報狀況,小弟使用了 sea0964 大大站上的資訊安裝了舊版 phpmyadmin 後
下載的資料在 Table 裡面來的亂碼可以正常顯示了 (雖然 Table 說明的部份變成亂碼,但我估計沒有影響)
http://img297.imageshack.us/img297/4221/12ka4.png

但我上傳了這個 name.sql 到資料庫再用 putty 去登入使用 mysql 指令倒資料回去卻出現以下錯誤訊息
http://img297.imageshack.us/img297/6466/13uh6.png

:collapse:collapse:collapse

bugmac
2007-12-27, 11:08 AM
我也有個爆掉的BLOG(WORDPRESS)資料庫
昨天看到這個討論串去檢查發現的當初安裝就(latin1)了
所以也趁機偷學一下 很有用 感謝一下各位大大
我沒問題了
至於seesawgame大大的問題 我想應該是這樣
我有做的步驟是
前面的步驟都一樣
最後把資料倒回來 然後我多做幾個步驟
sql檔要先轉成UTF8(用記事本存成UFT8)
然後要放回去的時候
裡面" CHARSET=latin1 " 要改成 utf8
這樣就不會有問題了
當然 SOME大大的 SET NAMES 'utf8 不要忘了

some
2007-12-27, 11:21 AM
回報狀況,小弟使用了 sea0964 大大站上的資訊安裝了舊版 phpmyadmin 後
下載的資料在 Table 裡面來的亂碼可以正常顯示了 (雖然 Table 說明的部份變成亂碼,但我估計沒有影響)
http://img297.imageshack.us/img297/4221/12ka4.png

但我上傳了這個 name.sql 到資料庫再用 putty 去登入使用 mysql 指令倒資料回去卻出現以下錯誤訊息
http://img297.imageshack.us/img297/6466/13uh6.png

:collapse:collapse:collapse


這是mysql 版本不同的關係, 版本較新的匯出不能匯進較舊的版本
舊的可以匯進新的. 只能向下相容. 注意一下版本就行了, 這不是大問題.

seesawgame
2007-12-28, 08:44 PM
我試著找到這一篇文章
http://linuxnews.idv.tw/?p=36

使用語法
#mysqldump -u帳號 -p –default-character-set=latin1 資料庫 >output.sql

但卻出現下面的錯誤
http://img174.imageshack.us/img174/4360/33yo8.png

dmwc
2007-12-29, 12:07 AM
我覺得最簡單的方法,就是別用phpmyadmin,直接dump出來轉碼就好

可以參考 http://www.domainclub.org/showthread.php?t=16725&highlight=mysql+dump

不過裡面哈拉參數寫錯了,是 mysqldump -u xxx -p database > database.sql --default-character-set=latin1

哈拉少寫一個- , dump 後用NPP或是其他軟體轉成UTF-8,然後再寫回去,就可以完成了

seesawgame
2007-12-29, 12:30 AM
我覺得最簡單的方法,就是別用phpmyadmin,直接dump出來轉碼就好

可以參考 http://www.domainclub.org/showthread.php?t=16725&highlight=mysql+dump

不過裡面哈拉參數寫錯了,是 mysqldump -u xxx -p database > database.sql --default-character-set=latin1

哈拉少寫一個- , dump 後用NPP或是其他軟體轉成UTF-8,然後再寫回去,就可以完成了


dwmc 兄,小弟我就是在網路看到很多文章用這個方式 dump 出來,試了之後就是出現上面那個錯誤訊息啊 :collapse
http://img174.imageshack.us/img174/4360/33yo8.png

some
2007-12-29, 06:48 AM
參數用 --opt 即可.

seesawgame
2007-12-29, 12:24 PM
參數用 --opt 即可.

我使用下面的語法
mysqldump -u name -p database > name.sql --opt

不過還是出現這樣的錯誤
http://img174.imageshack.us/img174/4360/33yo8.png

不知是不是主機商的問題呢?! ~what

網路遊民
2007-12-29, 01:40 PM
要不要試看看 mysqlcommander
www.bitesser.de

seesawgame
2007-12-29, 02:55 PM
要不要試看看 mysqlcommander
www.bitesser.de

感謝幫忙~yes,不過這個好像只是提供一般的備份與恢復呢
好像並不能解決編碼的問題呢 :collapse

網路遊民
2007-12-29, 03:28 PM
感謝幫忙~yes,不過這個好像只是提供一般的備份與恢復呢
好像並不能解決編碼的問題呢 :collapse
你的目的是要把資料庫升級為UTF-8(原來不是)
你的問題是用phpmyadmin無法得到正確的資料出來
因為之前的資料表校對設定錯誤的問題

我不太懂mysqlcommander是怎麼搞定的
它不會理會你的資料表校對設定是否正確
由它backup的資料存在於mysqlcommander\data的目錄內
你可以試著下載到你的硬碟上
用EmEditor開啟那些檔案
用合適的編碼開啟
你應該會發現那些檔案並不是亂碼

如果你要改為UTF-8
你只要在EmEditor內
[選擇全部]-->[複製(Ctrl-C)] -->[重新載入(UTF-8)]
--> [選擇全部] --> [貼上(CTrl-V)] --> 儲存
這樣子先把檔案在你的硬碟內改為UTF-8檔案
再把他們上傳到 mysqlcommander\data 的相對目錄內
再次叫 mysqlcommander RESTORE你的資料庫
這樣子你的資料庫的資料就會是 UTF-8編碼
即使你的資料表的校對依然設定錯誤

我用mysqlcommander不是解決這樣子的問題
不過我想應該是有辦法解決你的問題才對
比較保險一點是 RESTORE時先匯到另一個新的資料庫內
(可以用FTP修改data目錄內的目錄名字即可)
呼叫資料庫時呼叫新資料庫來試
如果不行也至少確保就資料庫沒被破壞

網路遊民
2007-12-29, 03:33 PM
Backup 跟 RESTORE時記得留意是否全部跑完
有時候可能資料庫太大或者DreamHost主機的問題而沒有跑完
只要由沒有跑完的地方繼續讓他跑就可以了

seesawgame
2007-12-31, 12:25 AM
但我一直懷疑是 dreamhost 上主機的問題
不管使用語法也好,或是「網路遊民」兄說的那個軟體
都會出現這樣的錯誤訊息

mysqlsump : got error: 2002: can't connect to local Mysql server through socket '/var/run/mysqld/sock' (2) when trying to connect

是不是主機商阻擋了什麼連結
還是少裝了什麼元件讓我不能處理這些工作呢? :collapse

wufenpu
2007-12-31, 01:23 AM
http://www.directadmin.com/forum/showthread.php?threadid=12324

照這篇的講法是my.cnf [client]區塊的socket路徑沒設所致

some
2007-12-31, 03:43 AM
但我一直懷疑是 dreamhost 上主機的問題
不管使用語法也好,或是「網路遊民」兄說的那個軟體
都會出現這樣的錯誤訊息

mysqlsump : got error: 2002: can't connect to local Mysql server through socket '/var/run/mysqld/sock' (2) when trying to connect

是不是主機商阻擋了什麼連結
還是少裝了什麼元件讓我不能處理這些工作呢? :collapse

何不google看看?

我搜尋 "can't connect to local Mysql server through socket"
第二筆:
http://www.linuxsir.org/bbs/showthread.php?t=214347

seesawgame
2007-12-31, 09:05 PM
我使用下面的語法


不過還是出現這樣的錯誤
http://img174.imageshack.us/img174/4360/33yo8.png

不知是不是主機商的問題呢?! ~what

真糟糕,小弟因為一直找不到原因所以寫信給 dreamhost 客服
結果他們回覆我說,我的語法好像少了 -h 這個主機網址的參數
大概是小弟看的文章多是 localhost 的教學,因為跟著打所以也跟著少 key 這一段了啊 :XD:
補上 -h 的確可以備份檔案了呢,再試試各位大大的方式 ~greenlau:

seesawgame
2008-01-01, 02:40 PM
感謝各位大大的協助,我把資料庫搞定了 :songyy
我使用了網站遊民大大的那套「mysqlcommander」系統
把資料存在 data/database/ 下載那些 txt 檔案後
使用 emeditor 轉存為 utf8 但是一開始存完的第一批還是亂碼
結果昨晚我再試了一回,發現在存成 utf8 時千萬要把下面的選單「加入 unicode 署名 (BOM) (G)」這個選項要取消
不然可能因為加了署名之後,其實裡面的編碼還是亂碼
非常感謝各位大大這一討論串對小弟的耐心指教與分享 :bow:bow:bow