重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
是的 字符集必須設置統一,中途也可以設置就看你會不會中途設置的方法。
創新互聯公司專注于企業全網整合營銷推廣、網站重做改版、雄縣網站定制設計、自適應品牌網站建設、H5高端網站建設、商城建設、集團公司官網建設、成都外貿網站建設、高端網站制作、響應式網頁設計等建站業務,價格優惠性價比高,為雄縣等各大城市提供網站開發制作服務。
php+mysql的utf-8中文亂碼問題的解決方法
問題匯總:
1.mysql數據庫默認的編碼是utf8,如果這種編碼與你的PHP網頁不一致,可能就會造成MYSQL亂碼.
2.MYSQL中創建表時會讓你選擇一種編碼,如果這種編碼與你的網頁編碼不一致,也可能造成MYSQL亂碼.
3.MYSQL創建表時添加字段是可以選擇編碼的,如果這種編碼與你的網頁編碼不一致,也可能造成MYSQL亂碼.
4.用戶提交頁面的編碼與顯示數據的頁面編碼不一致,就肯定會造成PHP頁面亂碼.
5.如用戶輸入資料的頁面是big5碼, 顯示用戶輸入的頁面卻是gb2312,這種100%會造成PHP頁面亂碼.
6.PHP頁面字符集不正確.
7.PHP連接MYSQL數據庫語句指定的編碼不正確.
使用mysql+php產生亂碼的原因都了解得很清楚了,那么解決就不困難了.
針對不同問題的解決方法:
1.mysql數據庫默認的編碼是utf8,如果這種編碼與你的PHP網頁不一致,可能就會造成MYSQL亂碼.
修改數據庫編碼,如果是數據庫編碼不正確,可以在phpmyadmin 執行如下命令:
Alter DATABASE 'test' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是將test數據庫的編碼設為utf8.
2.MYSQL中創建表時會讓你選擇一種編碼,如果這種編碼與你的網頁編碼不一致,也可能造成MYSQL亂碼.
修改表的編碼:
Alter TABLE 'category' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是將一個表category的編碼改為utf8.
3.MYSQL創建表時添加字段是可以選擇編碼的,如果這種編碼與你的網頁編碼不一致,也可能造成MYSQL亂碼.
修改字段的編碼:
Alter TABLE 'test' CHANGE 'dd' 'dd' VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
以上命令就是將test表中 dd的字段編碼改為utf8.
4.用戶提交頁面的編碼與顯示數據的頁面編碼不一致,就肯定會造成PHP頁面亂碼.
如果是這種情況容易解決,只需檢查下頁面,修改源文件的charset即可.
5.如用戶輸入資料的頁面是big5碼, 顯示用戶輸入的頁面卻是gb2312,這種100%會造成PHP頁面亂碼.
這種情況也是修改頁面charset即可.
6.PHP頁面字符集不正確.
為了避免PHP頁面亂碼的發生,PHP頁面開始第一句
header("content-type:text/html; charset=utf-8");
//強行指定頁面的編碼,以避免亂碼
7.PHP連接MYSQL數據庫語句指定的編碼不正確.
在連接數據庫的語句中.
mysql_connect('localhost','user','password');
mysql_select_db('my_db');
mysql_query("set names 'utf8'"); //select 數據庫之后加多這一句
字符集很簡單,但是數據的排序需要通過SQL語句來協助完成,ORDER BY 語句,代碼如下:
//?假設你已經成功連接了數據庫($mysqli變量假設為連接的資源句柄)
//?通過對象方式設置字符編碼
$mysqli?-?set_charset('utf8');
//?通過函數方式設置字符編碼
mysqli_set_charset($mysqli,?'utf8');
//?那么接下來是數據排序的話,需要編寫一條SQL查詢語句(DESC?倒序排列?|?ASC?正序排列)
$sql?=?"SELECT?`字段`?FROM?`表名`?WHERE?TRUE?ORDER?BY?`字段`?DESC;";
如果還有什么問題,歡迎追問~
以前的國外主機用的Mysql是4.x系列的,感覺還比較好,都無論GBK和UTF-8都沒有亂碼,沒想到新的主機的Mysql是5.0版本的,導入數據后,用Php讀出來全是問號,亂碼一片,記得我以前也曾經有過一次切換出現亂碼的經驗,原因肯定是Mysql版本之間的差異問題。
只好查資料,發現了一個解決方法,就是在mysql_connect后面加一句SET NAMES UTF8,即可使得UTF8的數據庫消除亂碼,對于GBK的數據庫則使用SET NAMES GBK,代碼如下:
$mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass);
mysql_query("SET NAMES 'GBK'");
和Mysql類里面的用法一樣,他們只過不過是我們鏈接數據庫的中間橋梁變了,本質并沒有變,還是對數據庫進行操作,而操作的要利用SQL語句,所以這里可以用同樣的mysql語句即可,只不過執行函數變了!在mysql類里面,我們用mysql_query(“SET NAMES gbk”);設置字符集編碼為gbk啦!在PDO里面我們用$db-query("SET NAMES gbk");當然也有其他的函數也可以。這里有百度文庫關于PDO的解釋和簡單使用!