無痛使用 WordPress – 資料庫修正篇
從以往使用WordPress的過程裡,因為主機資料庫的版本問題,造成中文的呈現出現火星文,這些混亂的的狀況,對於不懂程式設計的End User來說,真的是非常痛苦的使用經驗。這一次利用WordPress 升級到2.2.X版,在wp-config.php檔裡面也多了與編碼、資料庫相關設定的機會,可以一次解決以往惱人的亂碼問題。轉換的過程雖然有些繁瑣,不過希望可以透過一些簡單的文字與圖片,跟大家分享轉換的過程,幫助大家順利的完成變身,快樂使用WordPress。
資料庫修正作業版本介紹,MySQL:4.1.22-standard,phpMyAdmin:2.10.0.2,升級前WordPress 2.1.X。
狀況說明:在WordPress的輸入文章沒有問題,網誌的呈現也正常,但是在虛擬主機商提供的Cpanel管理介面,使用phpMyAdmin查詢資料庫內容時,資料庫的欄位多了校對(被預設成latin1_swedish_ci)欄(圖一),資料庫內容呈現亂碼(圖二)。
如果你的使用狀況跟max上列所提到的一樣,那麼接下來的說明文章希望可以幫助你輕鬆的完成資料庫修正。
資料庫修正步驟如下:先將資料庫的資料正確匯出,方法有二個。
A:如果你的主機提供SSH連線的話,可以直接執行資料庫備份指令,
mysqldump -u user -p sql_name ---character-set=latin1 > xxxxxx.sql
如果有興趣,想要更進一步研究,可以參考MySQL database migration: latin1 to utf8 conversion這一篇文章。
B:這是這一次說明的主要方式,使用phpMyAdmin,如果直接在主機提供的Cpanel管理介面中使用匯出資料庫,資料庫的內容還是亂碼,為了讓資料庫匯出正確的中文內容,需要對phpMyAdmin的程式作一點點修改,但是主機商通常不可能為單一個案作這樣的變動,解決的辦法就是自行安裝phpMyAdmin。
(1) 前往http://www.phpmyadmin.net下載phpmyadmin程式,目前版本是phpMyAdmin 2.11.0 UTF-8,解壓縮後打開config.sample.inc.php檔,找到 $cfg['blowfish_secret'] = '';
,在''
之間填入任意數字串,例如 $cfg['blowfish_secret'] = 'a12345678';
,修改完後將檔案存成config.inc.php。
(2) 接下來到/libraries資料夾,打開select_lang.lib.php檔,搜尋$GLOBALS['mysql_charset_map'] = array(
這一段文字下方,將'utf-8' => 'utf8',改成'utf-8' => 'latin1',
,修改完畢後存檔。
(3) 將phpMyAdmin的程式上傳到主機上,如果一切順利,打開瀏覽器輸入你放置phpMyAdmin程式的網址,應該會出現一個讓你登入的畫面(圖三),然後輸入你的使用者名稱跟密碼進入後,就可以開始使用自己安裝的phpMyAdmin管理自己的資料庫了。
(4) 登入phpMyAdmin以後,選取WordPress使用的資料庫,在頁面右上方點選輸出(紅色圈圈處,圖四)。
(5) 在資料庫輸出的頁面,記得檢查輸出項目是不是全選(箭頭所指位置,圖五),確定後往下看,下載儲存請打勾(箭頭A所指位置,圖六),然後點選右下方執行按鈕(箭頭B所指位置,圖六),開始資料庫進行下載。
(6) 接下來使用Notepad++開啟下載回來的sql檔,並將編碼轉換成UTF-8(圖七)。(另外,關於Notepad++的使用,可以查閱max之前的文章說明,無痛安裝 WordPress 前傳-工具篇 Notepad++。)再來修改資料庫內容相關設定,找到DEFAULT CHARSET=latin1
取代為 DEFAULT CHARSET=utf8
(圖八,圖九),完成後存檔,到這裡為止資料庫的修正算是到一個段落,而且是中文字體呈現正常的UTF-8編碼。
新手剛使用wordpress..
想問留comment個到點先可以唔洗awaiting moderation?
同埋點先可以打到中文..因為而家打中文既時候顯示不到..
同埋upload圖片方法..
點先可以uplaod到..
望回覆.. thx..
唔好意思…想問多一個問題..
就係而家係個blog到打中文出黎係顯示唔到..
請問有咩方法可以解決呢?
可能我說得不清楚..
情況是可以輸入中文..
但發出留言後不能顯示出來..
是..
剛發表了一篇測試文章
有英文字可以瀏覽..但無法呈現中文..
http://www.stephytang.com.hk/ver3/wordpress/
我跟你一樣,在某次用MySQL Administrator(一種圖形界面的MySQL+PHP的管理程式,從MySQL.com可下載各作業系統平台版本)備份資料庫,再還原回去以後,所有編碼就變這種「拉丁-瑞典」的奇怪格式,但網頁的中文並無異常,沒錯phpMyAdmin裡看到的全是亂碼。
照你方法去修正以後,看來並無異狀,可是資料庫原本總計3.2MB的,膨脹到5.2MB了(我Blog約200篇文章)。
此外,我手上同一隻機器內有四個WP部落格,一個是WP 2.05時代就開始的(逐步昇級到2.22了),三個是WP.2.22才開始新裝來玩的。
奇怪的是前一者,只要在wp-config.php裡,把「define(‘DB_CHARSET’, ‘utf8’);」加入utf8,Blog就反而變亂碼了;後三者加上utf8卻若無其事。
這四者若加入「define(‘DB_COLLATE’, ‘utf8_general_ci’)」,也都若無其事。
太晚看到你的部落格(不只這篇),我不知道哪版升級完,blog就爆炸了=.=
最後只好砍掉重練,哀….
請問位什麼我的blog輸入中文的文章就會出現這樣的亂碼..
那個unicode到底怎麼選擇 我要用big5 還是什麼 都不知道說
mysql那邊要設定什麼 試big5嗎 我的phpmyadmin 上顯示MySQL 文字編碼: UTF-8 Unicode (utf8) 連線校對要用哪個呢? 可以跟我說嗎 再網路上找的資料沒有一篇是對症下藥說的…
February 12th, 2008
?��??��?種�?貴�?質樸��??��?����?��???淡�??��?��?????��????
年�?��??��??��??家�?訪�??�西��??��????����??��??��?��???��??��??��?????��???��??��???��???路�?��??沿路????��?��??大路��??????��?��????????��??座�?山�?天�??��??��?��??人�?骨�??�起��??就�???????????��?????��?��?????��?????��??��???��???????��?��
拜託 誰可以教教我 我好想弄清楚!! 搞的頭好痛哦….謝謝
感謝你願意幫我解惑!!謝謝
我心急之下 忘記提供相關資料 抱歉…
我是用AppServ的封包
我下載的是這版:AppServ 2.4.9
Apache 2.0.59
PHP 4.4.7
MySQL 5.0.45
phpMyAdmin-2.10.2
我的wordpress是WordPress 1.5 正體中文安裝包 (02/17 同步發行版)
下載網址:http://rt.openfoundry.org/Foundry/Project/Download/Attachment/25673/18755/wp1.5zhTW.tgz
請問mysql 跟Apache 的相關設定有哪些?我都不太清楚 但是我好想了解 希望您可以教教我
您好~
我碰到的情況和您所寫的是一樣的~所以我就照個您的方式一步一步另外安裝自己的phpmyadmin~匯出sql~存成utf8並確認是非亂碼的資料~然後在回到虛擬主機的phpmyadmin裡頭把我的資料庫砍掉再重新匯入自己修正過的sql檔~
一直到您寫的第9步驟時我都還很順利~
但是在我sql匯入完成後~我的情況就和您寫的不一樣了~
此時我在虛擬主機的phpmyadmin中看到的資料是亂碼~但前端是正常~
我想說前端正常那應該沒問題~所就接著升級了wp~
(砍舊檔~傳新檔~按升級資料庫)
升級後的情況變成:
我在虛擬主機的phpmyadmin中和前端頁面所看到的資料都是亂碼~(不是問號)
不過我在自己安裝的那個phpmyadmin裡頭看的資料是正常的中文~
我上網找了一下~沒有看到有類似情況的說明了…
兩個phpmyadmin看到的是同一個資料庫~
實在是搞不懂為什麼在兩邊看到的資料就一個OK一個亂碼~
我從兩個phpmyadmin都載了同一份資料表回來看有哪裡不一樣~
發現只有一行不同~
我自己裝的那個phpmyadmin備份出來的SQL裡頭有一行
/星號!40101 SET NAMES latin1 星號/;
但是從虛擬主機上備份出來的SQL裡頭是寫
/星號!40101 SET NAMES utf8 星號/;
不知道跟這個有沒關係~真的不曉得問題是出在哪兒~
可以請您給我一些健議嗎?我該怎麼辦呢?
ps. 我從2.1升2.6.2
Turtle
你好,因為資料庫版本的關係,多了連線校對這個選項,所以在你將資料庫檔案要匯回去空白資料庫之前,要先確定這個sql檔是UTF-8,而且連線校對也設定為utf8_general_ci ,承如這篇文章第一,二頁步驟六所示。
另外,2.1版跟2.6版的WordPress設定檔案wp-config.php裡面的相關設定也有不同,請你多留意一下。
謝謝max這麼快就回覆了建議~
我現在看到的資料庫連線校對都是 utf8_general_ci 沒有錯~
sql檔的編碼檢查和 wp-config.php 的設定我再找一些資料來確認看看~
現在手邊電腦剛好沒有辦法做測試~
明天早上我會試看看的~謝謝!
太感動了!!!搞定了~
終於在前後端都能正常顯示中文了~
解決方式為:
我自己裝的那個phpmyadmin備份出來的sql裡頭有一行
/星號!40101 SET NAMES latin1 星號/;
改成
/星號!40101 SET NAMES utf8 星號/;
然後再從虛擬主機上的phpmyadmin匯入sql
就…正常了!
之前不知道還要改這一行~
只有改 DEFAULT CHARSET=latin1
總之~搞定囉~太開心了!
謝謝max的提點唷~
非常感謝您圖文並茂的教學,讓我這個菜鳥可以自行修正這麼棘手的問題。
以後升級 WordPress 就不用擔心亂碼的問題囉…. =)
NEO
你好,很高興這篇文章對你有幫助,當初我也是這樣修改過來的,所以才想把這樣的過程編寫下來,讓跟我有同樣困擾的朋友,可以有一個參考的資料。
站長大大,您好,不好意思再貼一貼排一下比較方便閱讀
看了您的這篇文章介紹,我的空間是跟智邦租的,phpmyadmin是他們的不是我自已架的我就改不了他們的設定,另外我的情況感覺跟您說明的情況一樣。
我測試備份及還原的流程如下:
我用二個網站來試
網站的運作都正常,
1. 我用wp的外掛backup 備份 *.sql的檔案,再用phpmyadmin 匯出 *.sql 所以有二個一樣的sql檔,但是備份的方式不同
2. 我故意到後台把分頁及文章全刪除。
3.還原方一、到phpmadmin 把 資料表清空,再匯入 用wp的外掛backup 備份的 *.sql檔結果字中文字全變成怪怪的符號。如右邊網站http://www.orangedesign.com.tw/index.php
還原二、到phpmadmin 把 資料表清空,再匯入 用phpmyadmin 匯出的 *.sql 檔結果字中文字全變成 ?? 問號,如右邊網站http://www.keran.com.tw/index.php
我一開始還只刪除一篇文章做備份及還原都正常,後來就想多刪除一些資訊,就把分頁及文章全刪。再來還原就變成像上面說的樣子。
我反覆做了十多次實驗都是得到那樣的結果。
煩請站長指導,謝謝
珠海
你好,在將資料庫匯回去之前,你必須先以文字編輯器開啟這個備份出來的sql檔案,確認檔案內的中文顯示是正確的,另外也必須將sql檔存成utf-8格式後,中文還是正常顯示,這樣你匯回去資料庫時才不會發生中文部分變成奇怪的符號或是問號。另外需要確認的是新建的資料庫連線校對是否設定正確。以上簡單給你參考。
你好,
如果不想改(怕自己手賤改壞),
我想重開一個新資料庫+重po之前的文章資料,請問:
————————-
國外主機代理商提供的版本資料如下:
Apache version: 1.3.41 (Unix)
PHP version: 5.2.5
MySQL version: 5.0.81-community
Operating system: Linux
使用cPanel 來管理
——————
用cPanel 進入phpMyAdmin時的第一頁,顯示
* 伺服器版本: 5.0.81-community
* 通訊協定版本: 10
* MySQL 文字編碼: UTF-8 Unicode (utf8)
* MySQL 連線校對: utf8_unicode_ci
我按資料庫選項時出現:
新資料庫B—–校對:utf8_unicode_ci
舊資料庫A—–校對:latin1_swedish_ci
其它資料庫C—校對:utf8_general_ci
總共: 3————–latin1_swedish_ci
(新資料庫B是新開的,要給wordpress2.8.2使用)
(舊資料庫A是wordpress2.7使用)
(其它資料庫C不是我建的,名稱是information之類的,不知為何它就在那了,)
新資料庫B我重開後,它先顯示latin1_swedish_ci,
我去”管理/校對”將它改成:utf8_unicode_ci
這樣子我上傳wordpress2.8.2後,
在wp-config.php
文太長被切? 哈
補下:
————————–
新資料庫B我重開後,它先顯示latin1_swedish_ci,
我去”管理/校對”將它改成:utf8_unicode_ci
這樣子我上傳wordpress2.8.2後,
在wp-config.php
不好意思,不知為何文會被切,(重覆的麻煩你刪去 sorry~)
我要問的是:
這樣子就可以確保前後台phpMyAdmin都能正常顯示中文+資料庫編碼為utf8?
謝謝
這樣子我上傳wordpress2.8.2後,
在 w p – c o n f i g . p h p
Nina
你好,問題簡單回覆如下,新建的資料庫,連線校對調整成utf8_unicode_ci,然後開始新建的文章才會在你的phpMyAdmin裡面呈現正常的中文,如果你想要在這個新的資料庫匯入舊版(2.7版)的資料庫,那麼在phpMyAdmin裡面的中文還會是亂碼,因為原始的檔案就是亂碼,匯到新的資料庫他還是亂碼。要解決這個問題,你必須參考這篇文章所提的,將舊版的資料庫匯出並且確實修改正常後,再匯入到新的資料庫,這樣在phpMyAdmin裡面看到這個新的資料庫的內容,中文才會正常呈現。
max,
謝謝回覆,因為不會改,所以我不會將舊文章用匯入方式,
我要用新資料庫B+手動慢慢重po以前的文章了!
這樣一來等於我是重裝wordpress重新po文
這樣子資料庫開啟時只要照你的舊文”無痛安裝 WordPress 2.3版”
是不是就OK?
另,新資料庫的”校對”到底我要選utf8_general_ci還是utf8_unicode_ci?
在wp-config檔裡,DB_COLLATE是填跟資料庫校對一樣的嗎?
謝謝~
Nina
utf8_general_ci還是utf8_unicode_ci這兩種都有人使用,我也感覺不出來那裡有差別,就我接觸的都是使用utf8_general_ci,基本上你挑選什麼,wp-config裡面就需要設定一樣,新建資料庫的方式與文章說明的一樣。
max
謝謝~ :D
很感謝max這一篇文章,今天研讀並實作,終於把編碼的問題解決了。
子堯
你好,很高興這裡的文章也可以幫助你解決編碼的問題。當然也歡迎你隨時來這裡與大家討論相關的使用問題。
您好,來冒昧請問問題:
狀況是這樣的,我目前有兩個站一舊(A)一新(B),我把A的資料庫下載備份並且重新放入空的資料庫當作B的data,再把A主機目錄底下的東西附製到B的目錄下。安裝上去後文章連結等等都沒有問題,就是前台變成亂碼。
照您這篇的方式我修改過sql檔案,sql檔案在A匯出來時本身指定語系的就是utf8了(不過檔案開出來的內容都是??只是我找到的指定的那幾行與法是定義utf8沒錯)然後/星號!40101 SET NAMES latin1 星號/;這個部份我也改成utf8,重新放上資料庫後,檢察wp-config.php裡,define(‘DB_CHARSET’, ‘utf8’); 跟 define(‘DB_COLLATE’, ‘utf8_general_ci’); 設定也都沒錯(連線校正是utf8_general_ci)。結果B站前台還是??唉。
感覺我能做的都做了。
卻還是無法除錯。
我在想問題會不會是出在A備份下來的sql檔,疑點大概是:
1)
A的資料庫我進去後發現連線校正的設定是原本的(拉丁1然後瑞典的樣子),所以我想可能是因為這原因所以下載的data是錯的,所以我將它設定成utf8_general_ci再下載後打開,內容卻還是都是??(不過我有檢察”資料本身”的連線校正是utf8_general_ci);上傳B資料庫之後B前台也還是問號。
問題無法解決……
2)另外請問如果是正常的sql檔案,下載後打開該是中文的部分會是中文嗎?
如果是的話就有爆點了XD 因為A下載下來的sql檔打開就是問號啊啊。
感覺我能做的都做了,檢查過wp-config.php裡也沒有問題,不知道這樣子您是否能幫忙看出問題在哪呢?先謝謝您喔。
您好,因為後來我剛剛將問題解決了所以回來分享一下。
這樣的問題是出在sql一開始輸出的檔案就有問題了,剛剛問了工程師對方說輸出的檔案應該是正常編碼。
所以我用另一個版本的mysql登入後更改語系設定讓語言編碼和輸出校正都是UTF-8 Unicode之後,重新輸出原本網站的資料在灌到新的資料庫裡就解決問題了:)
不好意思占了您很大的版面,因為剛剛我真的好急怎麼都解決不了,
最後才知道是輸出舊站資料時編碼和原本編碼方式不一樣所以沒有正確的輸出,匯入新站後自然就都是亂碼。:D
elecsheep127
你好,很高興問題可以解決,當然也很謝謝回來分享你的解決辦法。
您好….
我想請你幫我看看我的wordpress是出了什麼問題,因為我都沒辦法進去後台說….原本設定時還好好的….可以幫我看看嗎???拜託~很急>.<
可以email給你嗎??謝謝
belle
你好,因為沒有留下網誌的網址,所以無法連過去看看什麼狀況。
請你將狀況mail給我。
對了….我找不到你的email說….可以寄給我你的mail嗎?感謝你^^
http://www.letsgotaiwanyeshi.com/這裡…..謝謝嚕!!!
我log in的首頁有這兩條
Warning: Cannot modify header information – headers already sent by (output started at /home/letsgota/public_html/wp-
content/themes/Record/functions.php:338) in /home/letsgota/public_html/wp-login.php on line 354
Warning: Cannot modify header information
– headers already sent by (output started at /home/letsgota/public_html/wp-content/themes/Record/functions.php:338) in /home/letsgota/public_html/wp-login.php on line 366
重灌好開啟然後又得全部重新來…..好煩說….有沒有什麼辦法或是可以修復….謝謝你!!
如果可以我可以跟你拿msn或是ym嗎?謝謝喔!!
因為這是我論文的網頁……下禮拜要交
belle
你好,這個錯誤看起來是因為佈景主題可能在修改時改變了檔案屬性所造成,請檢查一下布景functions.php的338行,或是請切換回原來預設佈景主題,應該就可以登入管理介面。另外,也請檢視你的wp-config.php檔案,看看檔案的最上方是不是又置入不該出現的字元(例如空格符號)。
PS. 在About裡面有聯絡我的相關訊息,請查閱。
max謝謝你…我已經詢問我的網頁空間的公司請他們幫我處理嚕!!!所以現在可以正常登入使用….很感謝你!!
我目前沒辦法把我的主題改掉,因為論文已經報告嚕!!所以沒有辦法再改換….只能以這個佈景來做修改….
對了我可以請教你如果我的網頁要把我的每個page的link改到我logo下面那條紅色的bar上可以做到嗎?還是不行….因為我不是很懂php這部分可是css還算可以,謝謝喔!!
原來可以這麼做….
之前都直接重來….每次整理都花上很長的時間…..
謝謝阿~~
你好~請問一下要是我按輸出,跑不出畫面是甚麼情形?
Dumbass
你好,請先確定安裝phpMyAdmin程式的主機,php可以正常運作。
你好我的phpmyadmin按輸出畫面變空白,有解決的方式嗎
謝謝
tim
你好,上則Dumbass留言也是你嗎?
請確認你的phpMyAdmin安裝,是在什麼環境?有符合安裝的條件嗎?主機是否可以正常運作php程式,網頁是不是正常顯示。
基本條件成立了,再來檢視phpMyAdmin的問題。
其他功能網頁正常就只有輸出輸入沒辦法顯示
tim
你好,請檢視一下php.ini裡面關於記憶體(memory_limit)的設定大小,修改後需要重起web server。
我在我C潮沒找到php.ini但我有找到php.ini-dist裡面的我是找到這個
memory_limit=128M是嗎?
但我在我D潮有找到php.ini
我會非常感謝你