解決 PHP/mySQL 資料庫讀取中文顯示亂碼或問號

要搞定 PHP+mySQL 常見的中文亂碼或問號顯示的問題,最高原則就是–從頭到尾都編成UTF8。

四個編碼設定

我自己的經驗就是確認下述四個地方的編碼設定都是UTF8:

  1. mySQL資料表:用phpmyadmin建立資料表時,注意選擇utf8_unicode_ci的編碼 (通常在最下面)
  2. 在PHP內寫資料庫存取語法時,在mysql_select_db之前,加上 mysql_query(“SET NAMES ‘UTF8′");
  3. 顯示讀出資料庫結果的網頁,也要確認是否有加上
  4. 用編輯器開啟網頁編輯的編碼,若不是UTF8,會造成網頁內靜態中文字亂碼,因此請轉換為UTF8

從結果來看問題原因

Q. 從資料庫讀出的中文出現問號?

如果你進phpmyadmin看資料表內的中文顯示正常,可能是1,3,4你都做了,但2沒做。

Q. 從資料庫讀出的中文及靜態文字都是亂碼?

如果你進phpmyadmin看資料表內的中文顯示正常,可能是1,2,4你都做了,但3沒做。

Q. 從資料庫讀出的中文出現亂碼?網頁靜態文字是正常?

如果你進phpmyadmin看資料表內的中文也是亂碼,那應該是你1沒做,有做2;若你不想做1,就別做2。
如果你進phpmyadmin看資料表內的中文顯示正常,那應該是你3,4沒做。

Q. 從資料庫讀出的中文正常了,但網頁靜態文字是亂碼?

可能是4沒做到。

mySQL 資料表是亂碼,怎麼辦?

用phpmyadmin查看mySQL資料庫內的中文顯示亂碼 (資料表編碼可能是預設的latin1_swedish_ci,總之是非utf8語系),通常這種情況,是網頁前台本身沒編好UTF8,就把中文資料以亂碼的方式存入資料表。

這時建議你最好將資料表重建成utf8_unicode編碼,不然日後要用phpmyadmin看資料庫會很痛苦。如果你不打算重建,那在作mysql_select_db之前,就不要加上 mysql_query(“SET NAMES ‘UTF8′");,資料庫內的中文資料在網頁顯示應該還是會正常。

12 則回應給 解決 PHP/mySQL 資料庫讀取中文顯示亂碼或問號

  1. 小儀 說:

    在PHP內寫資料庫存取語法時,在mysql_select_db之前,加上 mysql_query(“SET NAMES ‘UTF8′");

    這段是要在 DW程式碼裡面打嗎

  2. mrmu 說:

    to 小儀:用DW打開存取資料庫的PHP程式碼,在mysql_select_db這行指令前加上該行即可。

  3. may 說:

    如果我在mysql_select_db這行指令前加上了……仍然出現問號…..應怎樣辨??

  4. Jz 說:

    很受用的教學~解決我的問題^^

    謝謝~

  5. globalfish 說:

    教程非常适用,谢谢分享!

  6. Soda 說:

    超級感謝,很有用

  7. 小學徒 說:

    學習了~

  8. 蔡先生 說:

    請問 我按你的方法嘗試 是成功沒錯
    但是 當我繼續按f5的時候 他會顯示
    =================
    無法顯示 XML 網頁
    無法使用 樣式表檢視 XML 輸入。請更正錯誤,然後按 重新整理 按鈕,或者稍後再試一次。

    ——————————————————————————–

    系統不支援指定的編碼。處理資源 ‘http://localhost/phpsqlajax_genxml’ 發生錯誤。

    ============================
    但是,再按一次f5,又正常
    但是,再按一次f5,又失敗
    但是,再按一次f5,又正常….
    請問這是何解????

發表迴響

你的電子郵件位址並不會被公開。

你可以使用這些 HTML 標籤與屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>