1 頁 (共 2 頁)

[問題] 關於phpMyAdmin裡的欄位亂碼,但在phpbb的顯示為正常...

發表於 : 2006-08-09 15:38
HEICZG
抱歉 覺得這應該是phpMyAdmin的討論問題 ,因此貼在此版面
如有錯請見諒
-----------------------
狀況環境如下
phpbb:2.0.21 Utf-8版
mysql: 5.0.18
phpMyAdmin: 2.8.2

首先 在論壇上顯示是正常的UTF-8字...也完全無亂碼問題(顯示一切正常)

但進入了phpmyadmin檢視欄位 發現只要是除了英文以外的字都是亂碼
(如圖)
圖檔

那從最上層的資料庫開始看起
小弟的論壇所用資料庫名是bravery...而編碼校對為utf-8(應該這樣是正常吧??)
圖檔

而再往下看 資料表的就開始怪怪的了@@ 怎麼欄位編碼為採用latin1
圖檔

這情況是發生在那一環節呢??

這二天看了不少有關utf8的轉換環境,大多是big5->轉成utf8之類的
但小弟論壇本身就是utf8..而資料庫也是全新建的 (但資料表是安裝phpbb時由系統自動建的)

也嘗試過把資料庫匯出(mysqldump),不指定編碼,則匯出的sql檔非英文字體為全部亂碼,
但再匯入後雖仍為亂碼,論壇仍可正常顯示

雖然這是後端的問題..在User瀏覽上無任何大礙

但之後舊站就是因為為了更換為utf-8資料,而放棄了原本資料,轉換為新的系統
想說現在資料還不多,不曉得有無法子可以讓中文字在phpmyadmin裡可以正常顯示
且匯出的sql檔也可以順利顯示中文,因為看了許多文章,不曉得觀念上還差那裡.就是無法把那些解答整合起來

大膽猜測(如果錯了煩請指點) 是否是phpbb在把資料匯入到資料欄時.被mysql先轉成latin1?
而轉出時,mysql再把他轉成utf-8,於是論壇上可以正常顯示?
但如果照此觀念來看...在用mysqldump匯出時 如果設成
mysqldump -default-charset-set=utf8 ,匯出的資料如果有中文不是應該可以正常檢視?
但此點嘗試之後還是亂碼Orz...
經過多次匯入匯出....不曉得是那一個環節觀念弄錯了...希望在論壇剛開始時,能把這問題解決....誠心拜託各位指點了 謝謝~

發表於 : 2006-08-09 17:14
chiouss

發表於 : 2006-08-09 17:39
HEICZG
嗯 觀於這篇有反覆看了不少次>"< , 仍有一些疑問

當篇提到
執行概況:
安裝好 MySQL 之後把資料庫預設為 UTF-8,接著把 phpBB 轉成 UTF-8。之後發現舊的資料讀取會有問題,需要一起轉換。
一來 我的phpbb不需要再轉utf-8, 二來 舊的資料讀取無問題@@"
在論壇上顯示一切都正常

但如果照那篇的方法嘗試...反而轉入的資料欄位雖然校對也呈現utf-8

但反而會造成論壇上全顯示為亂碼

但上面有幾點我不是很肯定
6.打開 MySQL 目錄底下 (或是可能在你 Windows 的目錄底下) 的 my.ini,在 [mysqld] 的地方加上:
由於小弟的系統是LINUX , 這裡是指ETC裡的My.cnf嗎?
如果是的話 , 也更改過了~"~ 用此方法轉入會使得本來正常顯示的論壇會變成亂碼
[附註] 如果你的 phpBB 是用 root 或是有同要權限的使用者去執行的 (這樣做不好喔!) 話,上面那個 init_connect 的指令會無效,你需要給 phpBB 開一個專門的使用者 (建議是這樣做),或是打開 db/mysql.php (如果你安裝的時候是選 MySQL 4.x 的話就要開啟 mysql4.php),找到 mysql_connect 的地方,在後面加上:
@mysql_query ("set names utf8;", $this->db_connect_id);
這樣才會正常顯示。
不過這裡的mysql.php我就找不到在那裡了~"~


可能我表達的有點亂 重新整理一次
1.目前在論壇上顯示的是UTF-8的語言,且顯示完全無誤
2.目前在phpmyadmin裡的資料欄位,顯示的中文完全是亂碼(只是資料欄位裡的,介面的顯示一切正常)
3.目前想讓phpmyadmin裡的資料欄位有關非英文的,可以不以亂碼呈現

稍後小弟把自己做的步驟貼上來...不曉得是中途那一部錯誤..Orz ...再請大大指點

附上小弟的網站

發表於 : 2006-08-09 21:07
chiouss
HEICZG 寫:可能我表達的有點亂 重新整理一次
1.目前在論壇上顯示的是UTF-8的語言,且顯示完全無誤
2.目前在phpmyadmin裡的資料欄位,顯示的中文完全是亂碼(只是資料欄位裡的,介面的顯示一切正常)
3.目前想讓phpmyadmin裡的資料欄位有關非英文的,可以不以亂碼呈現
你該先參考這篇。解法是照之前那篇做,但是你的轉出資料不需要再轉成 utf8,只需要加上

代碼: 選擇全部

set names utf8;
再轉入就可以了。

my.ini 和 my.cnf 一樣沒錯。

還有看不懂的地方可以看下面的 Reference Manual 連結。

發表於 : 2006-08-09 22:05
HEICZG
謝謝...我會用心把這篇看清楚@@(之前沒看到這篇耶=口=!!)

如仍有疑問再請前輩指點了<(_._)>

發表於 : 2006-08-10 01:04
HEICZG
唔...實在沒法子..我又厚著臉皮來問了~"~

目前 照著前輩們的教法...

已做到如下圖..
圖檔

而SQL裡的設定也如下圖
圖檔

但資料表裡的資料欄位裡的資料...仍為如下的亂碼
圖檔

但討論區上的顯示仍為正常....

不過 在轉出時有幾點小問題發生
使用如下這指令時
mysqldump -default-character-set=latin1 -u 帳號 -p 資料庫名 > 檔名.sql
所轉出的只有資料表的結構...並無資料內容
因此我在轉出時所下的指令則是去掉-default-character-set=latin

全部步驟為以下..
1.首先使用 mysqldump -u 帳號 -p 資料庫名 > 檔名.sql // 轉出資料

2.把"檔名.sql"這檔案內容的前面加了一段
SET NAMES utf8;
(之後有另試一次把裡面的
ENGINE=MyISAM DEFAULT CHARSET=latin1;都換成ENGINE=MyISAM DEFAULT CHARSET=utf8;)
然後下面步驟相同

3.因為看起來我的已經是utf8,所以我並無再用ConvertZ轉換
因此第3步我使用mysql -u 帳號 -p 資料庫名 < 檔名.sql //匯入資料

4.更改/etc/my.cnf 在[mysqld]裡多加了二段
init_connect= 'SET NAMES utf8'
default-character-set = utf8
然後重啟mysqld服務 , 就如上圖第一張

5.討論區使用及檢視一切ok,但phpmyadmin裡的資料欄裡的資料仍為亂碼....
而試著再做mysqldump轉出的資料部份也仍為亂碼...

恕我愚昧,實在不了解錯誤地方在那~"~
不曉得觀念就是卡在那裡...還望你費心指教了<(_._)>

發表於 : 2006-08-10 01:15
chiouss
轉出來的 sql 檔可以給我看看嗎?壓縮一下,放在網路上下載。方便嗎?
我想確認一下你原本資料庫裡面資料的編碼...

發表於 : 2006-08-10 01:36
HEICZG
前輩願意看當然可以@@(反正沒什麼貴重資料,而且資料不大,因為是新站遷移)

請問是要看已經轉完的還是未轉前的@@?

發表於 : 2006-08-10 02:11
chiouss
HEICZG 寫:前輩願意看當然可以@@(反正沒什麼貴重資料,而且資料不大,因為是新站遷移)

請問是要看已經轉完的還是未轉前的@@?
麻煩不要叫我什麼前輩,我只是遜咖而已。 Orz

發表於 : 2006-08-10 02:25
chiouss
由你提供的檔案來看,原始的轉出資料就已經不正確了,再放回去當然還是不對。

我之前給的例子是 big5 被當成 latin1 然後轉成 utf8 寫入,所以還原的方法是指定要用 latin1 輸出,就會得到 big5,然後再去轉成 utf8 再寫入。您的例子是 utf8 被當成 latin1,也被寫入成 latin1。所以應該也是要強迫輸出成 latin1 在用 utf8 寫入。這樣說不知道您能不能了解?

所以問題就出在你之前說的,用 mysqldump -default-character-set=latin1 會沒有輸出內容這個部份出問題。因為你最後輸出沒有加上 -default-character-set,所以得到的是轉碼過後的結果而非我們所要的還原過後的結果。

至於該如何處理,可能要麻煩您多多嘗試和研究了,因為這個 case 沒發生在我身上,我沒辦法自己動手去處理,只能把上面的那些過程解釋給你聽。

晚點我可能也會試試看拿自己站上的資料去模擬出相同的 case,然後思考看看要怎麼還原。

發表於 : 2006-08-10 02:31
HEICZG
哦哦~
經過這一番話@@ 我大約知道卡在那裡了>"<~~~

等會睡前再做一個嘗試....看情況如何~~明天再來報告..(做完大約3點了...)

太感謝你了^^~總算把一個老是轉不通的地方觀念弄通了

發表於 : 2006-08-10 03:02
HEICZG
結論失敗,明天嘗試..(還忘了備份最新的資料.下場當然就是...一些文章不見 :oops: )

最後嘗試4種轉出 (原來之前的--default 少打一個-
1.mysqldump --default-character-set=utf8 -u 帳號 -p 資料庫名 > 檔名.sql
失敗 仍為亂碼
2.mysqldump --default-character-set=latin1 -u 帳號 -p 資料庫名 > 檔名.sql
還是亂碼
3.mysqldump --default-character-set=big5 -u 帳號 -p 資料庫名 > 檔名.sql
這是亂試的(純亂嘗試...) 想也知道亂碼.
4.mysqldump -u 帳號 -p 資料庫名 > 檔名.sql
什麼都不加 還是亂碼( ̄。 ̄)y-~~(魂已經去一半了)

真是見鬼了...那...倒底在phpbb裡面...他是怎麼顯示正常的....

發表於 : 2006-08-10 10:43
chiouss
HEICZG 寫:最後嘗試4種轉出 (原來之前的--default 少打一個-
我也在想說應該是 -- 才對,當初怎麼會少打一個 - 沒發現到呢? :-o
1.mysqldump --default-character-set=utf8 -u 帳號 -p 資料庫名 > 檔名.sql
失敗 仍為亂碼
2.mysqldump --default-character-set=latin1 -u 帳號 -p 資料庫名 > 檔名.sql
還是亂碼
2 和 1 內容一樣嗎?照說 2 應該會成功才對...

還有,你要拿原本的資料庫來用,而不是你上回轉出又轉入的資料庫喔。但是你上回的「原始 sql」內容已經是錯誤的了,所以你把那個放回去再重新試驗可能還是不會正確......我該早點提醒你這件事情的。
真是見鬼了...那...倒底在phpbb裡面...他是怎麼顯示正常的....
這個倒是不難理解,因為資料被當成 latin1 但是也存成 latin1,所以 mysql 寫入的時候沒有做過任何轉換。輸出的時候也是 latin1 -> latin1,只是 browser 那邊再把它用 utf8 格式 decode 而已。

發表於 : 2006-08-10 12:52
HEICZG
chiouss 寫:2 和 1 內容一樣嗎?照說 2 應該會成功才對...
還有,你要拿原本的資料庫來用,而不是你上回轉出又轉入的資料庫喔。但是你上回的「原始 sql」內容已經是錯誤的了,所以你把那個放回去再重新試驗可能還是不會正確......我該早點提醒你這件事情的。
這裡對於原本的資料庫這定義有點不了解
因為之前已做過不少轉出轉入 (當時均無下--default-character-set=latin1)
然後再匯入
所以最最最原始的已經變成光了..>"<

之後的都是以亂碼的資料去轉出@@
而上面的步驟 則是先以mysql裡的所有設定都為latin1(除了character-set-system = utf8外)
先還原到都未做此篇嘗試時的資料(匯入動作)
然後 再以--default(中間略過太多字)=latin1 的動作匯出
之後嘗試打開該匯出之檔案,裡面的中文都是亂碼@@ (這裡應該不用再做把該檔轉成utf8了吧@@?)
不過,也有分二次 , 一次是再轉成UTF8(用某CXXXXXXZ程式轉的) 註:全名忘了(人在外面無法查)
一次是無把該檔轉成UTF8
分別再匯入一次(都有加上set names = utf8 ; )
然後..再去把my.cnf做修正並重新啟動
最後檢視討論區中文字,<==正常
檢視phpmyadmin裡的資料 <===不正常>關燈睡覺Orz

可能環境弄的太複雜了.我晚上重架一個實驗看看
看結果是不是因為該資料已被我轉出轉入轉到都亂掉了..XD
先把環境弄成最原始的...再來報告修改結論^^"

在此謝謝你不厭其煩的說明教學..慢慢的把一些零散的觀念拼起來了<(_._)>

發表於 : 2006-08-11 02:40
danLu
國外的網站的話,要求他們幫忙做設定有點困難,
我的經驗是換phpmyadmin 版本,
目前我的經驗2.5.7 版Big 與UTF8都可以正常備份與瀏覽,
2.6.4 與2.8.1則不行。