先講下兩個字元集的區別:
gb2312是標準中文字元集。
UTF-8 是 UNICODE 的一種變長字元編碼,即 RFC 3629,可以解決多種語言文本顯示問題,從而實現應用國際化和本地化。 UTF-8 是位元組順序無關的,它的位元組順序在所有系統中都是一樣的,排序更加容易。因此 UTF-8 具有更高的效能。
不過如果是純英文的話,用什麼都可以,用GB2312也沒問題。
再分析下出現亂碼的原因
mysql+php產生亂碼原因:
1. mysql資料庫預設的編碼是utf8,如果這種編碼與你的PHP網頁不一致,可能就會造成MYSQL亂碼.
2. MYSQL中建立表時會讓你選擇一種編碼,如果這種編碼與你的網頁編碼不一致,也可能造成MYSQL亂碼.
3. MYSQL建立表時添加欄位是可以選擇編碼的,如果這種編碼與你的網頁編碼不一致,也可能造成MYSQL亂碼.
4. 使用者提交頁面的編碼與顯示資料的頁面編碼不一致,就肯定會造成PHP頁面亂碼.
5. 如使用者輸入資料的頁面是big5碼, 顯示使用者輸入的頁面卻是gb2312,這種100%會造成PHP頁面亂碼.
6. PHP頁面字元集不正確.
7. PHP串連MYSQL資料庫語句指定的編碼不正確.
最後講 根治 的處方:
拿UTF8來舉例
1、 保證頁面的編碼
如果是html 那麼別忘了在 檔案開頭寫上
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
如果是 php那麼 記得在檔案最上方寫上
lzy 2008, View php source
- header("Content-type: text/html;charset=utf-8");
Parsed in 0.018 seconds
保證檔案的編碼必須是 UTF-8
解決方案 (1)把你的檔案用記事本開啟 ,選檔案另存新檔,在檔案名稱的下面有個編碼 看看字元集是不是UTF-8 如果不是請修改
2、 保證資料庫是UTF8
在添加表的時候 需要設定編碼為 UTF8
如果已經添加了 那麼可以
在PHPMYADMIN 中查看錶結構 的‘整理’屬性上 是否為 utf8_general_ci
如果不是 請修改
lzy 2008, View php source
-
- ALTER TABLE 'gbook' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
-
Parsed in 0.024 seconds
資料庫和欄位 的編碼同理:
lzy 2008, View php source
-
- ALTER DATABASE 'testdata' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
- ALTER TABLE ' testdata' CHANGE 'test' 'test' VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin
Parsed in 0.049 seconds
3、 PHP在串連資料庫的時候加上一句:set names utf8
lzy 2008, View php source
-
- mysql_connect('localhost','user','password');
- mysql_select_db('mydb');
- mysql_query("set names utf8;");//**設定字元集***
-
Parsed in 0.046 seconds
這樣就做到萬無一失了,如果還有什麼問題 大家可以給我留言 我會及時回複的