mysql 查詢中文亂碼的問題
阿新 • • 發佈:2018-12-23
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協議,轉載請註明來源