1. 程式人生 > >mysql 查詢中文亂碼的問題

mysql 查詢中文亂碼的問題

2011-09-22

昨天遇到一個很奇怪的問題。 mysql 裡面所有字元編碼設定都是utf8

mysql> SHOW VARIABLES LIKE 'character_%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /opt/mysql/share/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

php 裡面預設編碼和檔案header都是utf8,提交輸入的入庫的中文和在網頁中的中文都能正確顯示,但是用pietty(putty)連線到mysql服務員,用mysql客戶端查詢,顯示中文卻是亂碼。無論設set names utf8,還是怎麼試,都看不到查詢的內容的中文,作業系統的locale也是utf8,pietty配置也是utf8,中文檔案和內容都能正確顯示。 所以我不敢斷定資料庫所儲存的內容到底是不是utf8. 如果不是,為何utf8頁面的html又能正確顯示呢?如果是,怎麼轉碼都得不到正確的結果。確認入庫的不是utf8,也不是任何gbk,gb2312,gb18030.

經過仔細研究,發現原來我在php入庫時加了htmlspecialchars進行編碼。而由於nginx預設編碼是gbk,所以實際是utf8編碼以htmlspecialchars再編碼,以gbk儲存,這樣無論如何都看不到中文字元。

解決辦法:

mysql連線後,加入一句: mysql_query(‘set names utf8’,$this->conn); 這樣,在mysql後臺用select語句就能檢視到正確的中文文字,php同樣可以正確顯示中文。

如非註明轉載, 均為原創. 本站遵循知識共享CC協議,轉載請註明來源