現(xiàn)在許多網(wǎng)站都是用MySQL+PHP做成的,可是經(jīng)常產(chǎn)生亂碼,那么產(chǎn)生亂碼原因有哪些呢?本文就來(lái)徹底分析一下吧:
MySQL數(shù)據(jù)庫(kù)默認(rèn)的編碼是utf8,如果這種編碼與你的PHP網(wǎng)頁(yè)不一致,可能就會(huì)造成MySQL亂碼;
MySQL中創(chuàng)建表時(shí)會(huì)讓你選擇一種編碼,如果這種編碼與你的網(wǎng)頁(yè)編碼不一致,也可能造成MySQL亂碼;
MySQL創(chuàng)建表時(shí)添加字段是可以選擇編碼的,如果這種編碼與你的網(wǎng)頁(yè)編碼不一致,也可能造成MySQL亂碼;
用戶(hù)提交頁(yè)面的編碼與顯示數(shù)據(jù)的頁(yè)面編碼不一致,就肯定會(huì)造成PHP頁(yè)面亂碼;
如用戶(hù)輸入資料的頁(yè)面是big
PHP頁(yè)面字符集不正確;
PHP連接MySQL數(shù)據(jù)庫(kù)語(yǔ)句指定的編碼不正確。
注意:
很多人都懷疑MySQL版本不一致會(huì)導(dǎo)致亂碼,相信看了本說(shuō)明你就不會(huì)這樣認(rèn)為了。
平時(shí)你在某些網(wǎng)站看到的文字可能有幾種編碼, 如你看到一個(gè)繁體字,它有可能是big5編碼,也有 可能是utf-8編碼的,更有可能是gb碼的,沒(méi)錯(cuò),也就是說(shuō)有簡(jiǎn)體編碼的繁體字,也有繁體編碼的簡(jiǎn)體字,一定要了解這一點(diǎn)。
如果你是做一個(gè)簡(jiǎn)體編碼的網(wǎng)頁(yè),編碼定為GB2312,如果有香港和臺(tái)灣地區(qū)的訪客提交繁體的信息,就可能會(huì)造成亂碼,解決方法:
將網(wǎng)站編碼設(shè)為 utf-8,這樣可以兼容世界上所有字符。
如果網(wǎng)站已經(jīng)運(yùn)作了好久,已有很多舊數(shù)據(jù),不能再更改簡(jiǎn)體中文的設(shè)定,那么建議將頁(yè)面的編碼設(shè)為 GBK, GBK與GB2312的區(qū)別就在于:GBK能比GB2312顯示更多的字符,要顯示簡(jiǎn)體碼的繁體字,就只能用GBK.
使用MySQL+PHP產(chǎn)生亂碼的原因都了解得很清楚了,那么解決就不困難了。
MySQL+PHP產(chǎn)生亂碼的解決辦法:
如果安裝MySQL的編碼已不能更改,很多朋友是購(gòu)買(mǎi)虛擬主機(jī)建立網(wǎng)站,無(wú)權(quán)更改MySQL的安裝編碼,這一關(guān)我們可以跳過(guò),因?yàn)橹灰竺娴牟骄壅_,一樣能解決亂碼問(wèn)題。
修改數(shù)據(jù)庫(kù)編碼,如果是數(shù)據(jù)庫(kù)編碼不正確,可以在PHPmyadmin 執(zhí)行如下命令:
ALTER DATABASE 'test' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是將test數(shù)據(jù)庫(kù)的編碼設(shè)為utf8.
修改表的編碼:
ALTER TABLE 'category' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是將一個(gè)表category的編碼改為utf8.
修改字段的編碼:
ALTER TABLE 'test' CHANGE 'dd' 'dd' VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
以上命令就是將test表中dd的字段編碼改為utf8.
如果是這種情況容易解決,只需檢查下頁(yè)面,修改源文件的charset即可。
這種情況也是修改頁(yè)面charset即可。
在連接數(shù)據(jù)庫(kù)的語(yǔ)句中。