作者 主題: [求助]mysql資料無法轉移至新主機(mysql 3.23.58-->4.1.7)  (閱讀 17099 次)

0 會員 與 1 訪客 正在閱讀本文。

aerocat

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
my system is centos 3.4 ---> centos v4 (系統不支援big5)
mysql is 3.23.58 --> 4.1.7 (原資料為big5)
phpmyadmin is 2.6.0
因為要升級系統,而新的系統只支援unicode, 試了很多方法, 都無法將資料轉過去
方法一,  先將資料轉成utf-8,
a. 用mysqldump -u root -p  db_name > db_name.sql
b. 用 windows 下的covertz 轉成utf-8, 傳到新主機,
c. 在新主機, mysql -u root -p db_name < db_name.sql ---> 失敗, 語法錯誤
   (若不轉成utf-8, 就沒問題, 但從phpmyadmin看資料是亂碼,)

方法二,dump下來的資料, 先傳到新主機,
用  iconv -c -f big5 -t utf8 MysqDumpFile.sql 轉完(在textedit 下確定轉成utf-8), 但是 restore 後用phpmyadmin 看是亂碼, phpmyadmin確定語系已經設成
 MySQL 文字編碼: UTF-8 Unicode (utf8)
MySQL 連線校對 utf-8-unicode-ci

方法三, 跟方法二類似, 轉成uft-8 後, 修改dump file 加上
SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;

還是亂碼,
請教教我吧

或是可以將資料保留為BIG 5格式

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
麻煩....
mysql 連進去...
把 status 的狀況傳上來大家看一下..
可能跟 server , client 的 charset 有關...
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

aerocat

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
引述: "Darkhero"
麻煩....
mysql 連進去...
把 status 的狀況傳上來大家看一下..
可能跟 server , client 的 charset 有關...


請問要看哪一些狀況, 譬如要下哪些指令

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
就....有個 mysql 的指令..它是個 command line 的程式...
用它可以去聯結資料庫 select 看資料庫狀態等等...
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

aerocat

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
引述: "Darkhero"
就....有個 mysql 的指令..它是個 command line 的程式...
用它可以去聯結資料庫 select 看資料庫狀態等等...


我想應該是Character Sets and Collations  的問題,
我只有mysql 3.xx經驗, 第一次用mysql 4.xx, 第一次遇到Character Sets and Collations  的問題, 而且看起來很複雜, 可能要K一下manual..
我的 server status 請見
http://home.pchome.com.tw/web/jfkwang/mysqlstatus.pdf

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
看了一下...似乎這是rpm 安裝的..預設都是跑 latin1...

你試試看..先用 phpMyAdmin 2.6.1 建立一個資料表.記的指定該資料表為 utf8_generial_ci ..
然後用 mysql < dump.sql 傳進去...

dump.sql 先用 iconv 轉成 utf8 格式.

dump.sql 中要記的設定 client charset
代碼: [選擇]
SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;


最好..每個資料表的 create 加上 charset set ...
像是這樣.
代碼: [選擇]
CREATE TABLE `TableName` (
blan...blan...blan...
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

aerocat

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
現況報告

後來我不轉uft-8, 直接restore dump-file.sql 回去, 這樣phpbb2就可以, (Character Sets and Collations 全部用latin1)
但是從phpmyadmin中看到的都是亂碼, 這樣資料沒辦法維護.
 
   
   請問有什麼辦法可以保留big5格式資料, 但是phpmyadmin可以看到正常中文
   或是一定要轉換成utf-8
   (1)原資料轉成uft-8要怎樣作才會正常      
   (2)非ie 看可以正常顯示嗎?
   (3)另外原先資料中有日文, 可以用incov轉換嗎?
------------------------------------------------------------------------------------  
回覆Darkhero:
是rpm安裝的,
*********************************************
你的方法我會測一下, (ps資料僅有中 , 英文)
中文字部份不見了
用 uft8-unicode_ci , 也會這樣
***********************************************

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
引述: "aerocat"
現況報告

後來我不轉uft-8, 直接restore dump-file.sql 回去, 這樣phpbb2就可以, (Character Sets and Collations 全部用latin1)
但是從phpmyadmin中看到的都是亂碼, 這樣資料沒辦法維護.
 
   
   請問有什麼辦法可以保留big5格式資料, 但是phpmyadmin可以看到正常中文
   或是一定要轉換成utf-8
   (1)原資料轉成uft-8要怎樣作才會正常      
   (2)非ie 看可以正常顯示嗎?
   (3)另外原先資料中有日文, 可以用incov轉換嗎?
------------------------------------------------------------------------------------  
回覆Darkhero:
是rpm安裝的,
*********************************************
你的方法我會測一下, (ps資料僅有中 , 英文)
中文字部份不見了
用 uft8-unicode_ci , 也會這樣
***********************************************


但是我轉進去很正常??... 真不懂為什麼會這樣...

dump.sql 方便的話可以給我一份讓我測試嗎?...
如果可以的話麻煩您壓縮後 寄到 darkhero@gmail.com 我測試好會立刻給您回覆.
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

aerocat

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
Sorry 我剛剛又重新做了一次
原先我轉UTF-8的指令是
 iconv -c -f big5 -t utf-8 phpbbforums.sql -o ppp.sql
部分改成大寫(參考linux 手冊)
 iconv -c -f Big5 -t UTF-8 phpbbforums.sql -o ppp.sql

這樣就可以了,奇怪大小寫有差嗎? 那我這幾天不是............
我在整個重作看看
謝謝

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
應該不會有因為 大小寫 不同而有差異吧..Q_Q...
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

aerocat

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
現在狀況:
(1)資料庫的資料用phpmyadmin看已經正常,花了好多時間去修改big5-->uft-8轉碼後一些字元亂碼的問題.
(2)網頁中有中文的在browser顯示正常
(3)但是存在資料庫中的資料在browser中卻是亂碼(我有一個phpbb2的forums)



*****************************************************************************

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
你有沒有修改 phpbb2 的資料庫連結部份的程式?...

加上 SET ?...

根據我目前看到的你的情況...
可能是....

1. phpbb 是以 big5 為編碼.你在網頁上看到正常的中文是因為那是語系檔的中文.
2. 看到的一堆 ???? 是因為,從 mysql 出來到 php 中間 php-mysql 進行了轉碼.
但是由於編碼不符的問題.所以就是 ???? ....
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
剛剛特別去找了 phpbb2 2.0.13 的檔案來測試,找出該在哪裡加入語法...

你找一下..檔案
include/db.php
加在最後面
代碼: [選擇]

$db->sql_query("SET NAMES big5;");
$db->sql_query("SET CHARACTER_SET_CLIENT=big5;");
$db->sql_query("SET CHARACTER_SET_RESULTS=big5;");


這樣子你就可以, 資料庫用 utf8 格式, phpbb2 用 big5 格式.
而 phpMyAdmin 2.6.1 又可以正常以 utf8 去編輯內容.

另外..我架起來測試的地方請在這裡看一下

http://home.v-dark.net/~darkhero/phpBB2/

http://home.v-dark.net/~darkhero/phpMyAdmin-2.6.1/
帳號 phpbb2 密碼 phpbb2

以上測試範例我會一周內刪除.
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

aerocat

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
太感謝了, 本來要放棄了, 我也在竹貓找了很久, 都沒有找到這個方法,


不過還是有一點許蓋功, 不過這點問題應該是不難解決的.


Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
那個問題只有在utf8 下才比較能解決...

一般的許公蓋沒問題..

有問題的是...最後一個字是 許功蓋 ....

而為什麼一堆人沒有找到這個解決方法....

=_=...因為...phpbb2 是先載入 mysql 後從 mysql 中取得 lang 設定才去讀取 lang file , 不然我想改成 依據 lang 檔案中的 encode 變數來動態調整 set 的編碼....Q_Q...可惜沒法度....
只好先用這種方式.
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
Hi....

如果你還有在看這個討論串的話....

我剛剛利用了一點點的時間...建立了另外一個測試phpbb2站...
phpbb2 UFT8 版
http://home.v-dark.net/~darkhero/phpBB2UTF8/

跟原來的
http://home.v-dark.net/~darkhero/phpBB2/
使用的是同一個 phpbb2 資料庫.

相關程式碼我只有修改
代碼: [選擇]
$db->sql_query("SET NAMES big5;");
$db->sql_query("SET CHARACTER_SET_CLIENT=big5;");
$db->sql_query("SET CHARACTER_SET_RESULTS=big5;");


代碼: [選擇]
$db->sql_query("SET NAMES utf8;");
$db->sql_query("SET CHARACTER_SET_CLIENT=utf8;");
$db->sql_query("SET CHARACTER_SET_RESULTS=utf8;");


以及把原來 big5 的語系檔案利用 piconv 轉成 utf8 及修改 lang_main 中的 big5 為 utf8 而已...
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

aerocat

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
我已經按照你的新方法,並且測試成功了,
我的頁面文字和資料庫內的資料, 原先在新主機上已經都轉換成utf-8了
所以在原先的code上一定要加上, 資料庫中的中文資料才能正常顯示
======================================
$db->sql_query("SET NAMES utf8;");
$db->sql_query("SET CHARACTER_SET_CLIENT=utf8;");
$db->sql_query("SET CHARACTER_SET_RESULTS=utf8;");
======================================

我有一個疑問,
(1)按照竹貓上的utf-8化文章, 都沒有人提到要加上這一段code, 這是僅有mysql 4.1.10以上才會有的問題嗎?

(2)請問用iconv 轉檔, 跟用piconv 有不同嗎?

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
引述: "aerocat"
我已經按照你的新方法,並且測試成功了,
我的頁面文字和資料庫內的資料, 原先在新主機上已經都轉換成utf-8了
所以在原先的code上一定要加上, 資料庫中的中文資料才能正常顯示
======================================
$db->sql_query("SET NAMES utf8;");
$db->sql_query("SET CHARACTER_SET_CLIENT=utf8;");
$db->sql_query("SET CHARACTER_SET_RESULTS=utf8;");
======================================

我有一個疑問,
(1)按照竹貓上的utf-8化文章, 都沒有人提到要加上這一段code, 這是僅有mysql 4.1.10以上才會有的問題嗎?

(2)請問用iconv 轉檔, 跟用piconv 有不同嗎?


首先回答你第一個問題....

因為大部分的人都使用 mysql 4.0 or mysql 3.x , 而 4.0 or 3.x 沒有我們這次看到的 "client , database 語系自動轉換" 的問題....
基本上,就是資料庫裏面是什麼東西...就都原原本本的丟出來...
所以只是將內容轉換成 utf8 , 但是這會有一些問題,例如說在 mysql search,資料欄位大小判斷 等等.會有一些需要人工去修正的...

而你可以注意到 phpbb-tw 上轉換到 utf8 而又用 mysql 4.1 的人...
大部份 "資料在phpMyAdmin-2.6.1中編輯" 會發生 "在 phpMyAdmin 2.6.1 後是亂碼" 所以就 "換回 phpMyAdmin 2.5.x" ......
因為大部份的人,只考慮"網站能動.網站不要出來亂碼" 這樣而已...
像是你願意研究為什麼 utf8 資料轉換進去後,怎樣才會正常,基本上很少....

而為什麼用 phpBB2 全新安裝 在 mysql 4.1 上的沒有亂碼呢?...
這是因為再建立資料庫,到使用, client 跟 database 的 charset 都相同....

2. 為什麼用piconv , 這..沒有什麼..只是 piconv 是用 perl 去作的 , iconv 是 glibc 的..
而 iconv 沒有用 -c 會中途因為轉碼失敗停止, piconv 不會...
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

aerocat

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
呵呵呵, 如果沒有時間壓力,我倒是蠻喜歡研究一些新的東西,
這次要更新主機, 最主要是我們的IT等 REDHAT ES的 2.6 kernel好久了,
好不容易readhat出了新版的ES LINUX, 所以要趕快將原先不能用的軟體放上去, 而uft-8 也是重點, 因為有許多國際人士在用, 以前都強迫他們用英文, 現在全部的人都在等我測完, 我是已經快沒力了, 因為'搜尋"還是不能用,已經搞了一個早上. 對的跟search有關的code, 也看不出來要改哪裡.

我只有在一開始弄phpbb2 的時候, 有認真的去看完整個code, 經過2年,現在都忘光了, 我看真的要將phpbb2 升級到最新版.
這次真的太感謝你了....

搜尋功能改好了

aerocat

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
再跟各位報告一下, 連java sql語法也要跟著改變,
所以沒必要大家先不要用mysql 4.1.xxx
實在太累了

updated....

如果資料中有"許蓋功餐"這些字, 務必 再轉成unicode 後以人工檢查一遍是否有帶"/", 將他移除 後, 再放到 server目錄中. 語系檔也要檢查一下,

另外 redhat es v4 or centos v4 的 gedit好像有問題, 開有中文的php檔會有亂碼問題, 請將檔案改成 *.txt來處理.

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
事實上都是同樣的觀念...

只要程式設計當初沒有考慮到 client charset 跟 database charset 的設定...
就需要手動修改好這部份,然後就會正常了...
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

學飛的小鳥

  • 活潑的大學生
  • ***
  • 文章數: 349
    • 檢視個人資料
看了上面的討論..我有一個很大的疑問...
資料表轉成 utf-8 後,
直接將 phpbb 的 lang_main.php ..

$lang['ENCODING'] = 'big5';

改成

$lang['ENCODING'] = 'utf-8';

這樣不就可以解決網頁顯示的問題了..