MYSQL/PHP/XAJAX/PHPMYADMIN字符集問題梳理

 今天下午反覆實驗了一下午,雖然還沒有完全總結好,不過先記一記.
先說經驗:
1. xajax支持中文問題(0.2.5以上版本)
xajax默認使用uft-8字符集,不支持中文(奇怪,uft-8字符集應該支持中文), 解決辦法主要有兩種較爲可行.
1) 修改 xajax.inc.php中的XAJAX_DEFAULT_CHAR_ENCODING,默認爲uft-8,修改爲gb2312.(經過測試修改成其他均無效).
2)不修改xajax.inc.php,而是在創建xajax對象時指定字符集.
 $xajax = new xajax('','xajax_','gb2312');
 另外xajaxResponse創建時也需要指定字符集
 $resp = new xajaxResponse('gb2312');
以上兩種方法均可順利解決.網上其他方法比較混亂,未予測試.

2. 在xajax中調用MYSQL中的數據顯示
 1)根據反覆試驗,使用默認latin1字符集的MYSQL可以直接支持xajax輸出,不需要做任何額外設置.而且用PHP腳本和命令提示符向表中插入數據時均無問題.唯一缺點是這樣插入的中文在phpmyadmin下顯示亂碼,因爲phpmyadmin用uft-8編碼顯示.(我想這對編程沒有大的影響,因爲phpmyadmin很少用來直接查看數據內容.用做表設計\維護等沒有任何問題).
 2)也可以使用UFT-8,但是在xajax中要正常顯示必須首先執行:
 mysql_query("SET CHARATER SET gb2312")
 此種情況下通過phpmyadmin插入的數據在phpmyadmin下可以顯示.通過PHP腳本插入的數據無法正常顯示,但是可以直接在xajax 中顯示而不需要執行上面的腳本.

以上主要是總結的經驗.研究中也有另外一點心得.
(不一定正確,目前還在總結中,請勿迷信)
不管mysql的表中如何設置字符集,通過PHP腳本向表中插入數據時,數據的編碼仍然是默認的編碼.如latin1,而不是根據字段的字符集類型存儲.如表的某個字段設置了uft-8作爲整理,但是用PHP插入數據時仍然以latin1編碼插入.
我認爲,表的數據格式只是數據在表中存儲時所用的格式,度取時仍按存入時的編碼. 至於PHPMYADMIN中顯示亂嗎,我看大可不必理會.

3、設計表時直接不要用gb2312,經過試驗,這個字符集極不好用。

總之,設計表時按照默認的latin1方式兼容性就很好。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章