程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 淺談MySQL+PHP產生亂碼的原理及解決方法

淺談MySQL+PHP產生亂碼的原理及解決方法

編輯:關於MYSQL數據庫

  MySQL+PHP產生亂碼原因:

  ◆ MySQL數據庫默認的編碼是utf8,如果這種編碼與你的PHP網頁不一致,可能就會造成MySQL亂碼;

  ◆ MySQL中創建表時會讓你選擇一種編碼,如果這種編碼與你的網頁編碼不一致,也可能造成MySQL亂碼;

  ◆ MySQL創建表時添加字段是可以選擇編碼的,如果這種編碼與你的網頁編碼不一致,也可能造成MySQL亂碼;

  ◆ 用戶提交頁面的編碼與顯示數據的頁面編碼不一致,就肯定會造成PHP頁面亂碼;

  ◆ 如用戶輸入資料的頁面是big5碼, 顯示用戶輸入的頁面卻是gb2312,這種100%會造成PHP頁面亂碼;

  ◆ PHP頁面字符集不正確;

  ◆ PHP連接MySQL數據庫語句指定的編碼不正確。

  注意:

  很多人都懷疑MySQL版本不一致會導致亂碼,相信看了本說明你就不會這樣認為了。

  平時你在某些網站看到的文字可能有幾種編碼, 如你看到一個繁體字,它有可能是big5編碼,也有 可能是utf-8編碼的,更有可能是gb碼的,沒錯,也就是說有簡體編碼的繁體字,也有繁體編碼的簡體字,一定要了解這一點。

  如果你是做一個簡體編碼的網頁,編碼定為GB2312,如果有香港和台灣地區的訪客提交繁體的信息,就可能會造成亂碼,解決方法:

  將網站編碼設為 utf-8,這樣可以兼容世界上所有字符。

  如果網站已經運作了好久,已有很多舊數據,不能再更改簡體中文的設定,那麼建議將頁面的編碼設為 GBK, GBK與GB2312的區別就在於:GBK能比GB2312顯示更多的字符,要顯示簡體碼的繁體字,就只能用GBK。

  使用MySQL+PHP產生亂碼的原因都了解得很清楚了,那麼解決就不困難了。

  MySQL+PHP產生亂碼的解決辦法:

  如果安裝MySQL的編碼已不能更改,很多朋友是購買虛擬主機建立網站,無權更改MySQL的安裝編碼,這一關我們可以跳過,因為只要後面的步聚正確,一樣能解決亂碼問題。

  修改數據庫編碼,如果是數據庫編碼不正確,可以在PHPmyadmin 執行如下命令:

  ALTER DATABASE 'test' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

  以上命令就是將test數據庫的編碼設為utf8。

修改表的編碼:

  ALTER TABLE 'category' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

  以上命令就是將一個表category的編碼改為utf8。

  修改字段的編碼:

ALTER TABLE 'test' CHANGE 'dd' 'dd' VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

  以上命令就是將test表中dd的字段編碼改為utf8。

  如果是這種情況容易解決,只需檢查下頁面,修改源文件的charset即可。

  這種情況也是修改頁面charset即可。

  在連接數據庫的語句中。

mysql_connect('localhost','user','passWord'); mysql_select_db('my_db'); MySQL_query("set names utf8;");     //select 數據庫之後加多這一句

  為了避免PHP頁面亂碼的發生,PHP頁面開始第一句

  header("content-type:text/Html; charset=utf-8"); //強行指定頁面的編碼,以避免亂碼

  注意:照以上方法修改以後只能保證你新插入的數據不會亂碼,舉個例:如果你用戶已提交的數據是BIG5,你卻想通過以上方法改為可以在GB2312的網頁正確顯示是不可能的, 這種文字內碼的變換只能通過另寫程序來解決。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved