linux下mysql中文亂碼(中文問號)解決辦法
實現:
1.檢視原編碼
程式碼如下 | 複製程式碼 |
mysql> show variables like 'character%'; //執行編碼顯示,可以看到預設是latin1 +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ |
2.修改/etc/my.cnf,分別在[client],[mysqld],[mysql]欄位裡新增default-character-set=utf8。注意[mysqld]欄位與[mysql]欄位是有區別的。這點在網上沒人反饋過。
# vim /etc/my.cnf //新增default-character-set=utf8
程式碼如下 | 複製程式碼 |
[client]
[mysqld]
[mysql] |
default-character-set=utf8修改完成後,service mysql restart重啟mysql伺服器,使用SHOW VARIABLES LIKE ‘character%’;檢視,發現資料庫編碼全已改成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 | /usr/local/mysql/share/mysql/charsets/ | +--------------------------+----------------------------------------+ |
3.如果上面的都修改了還亂碼,那剩下問題就一定在connection連線層上。解決方法是在傳送查詢前執行一下下面這句(直接寫在SQL檔案的最前面):
程式碼如下 | 複製程式碼 |
SET NAMES ‘utf8′; |
它相當於以下三指令:
程式碼如下 | 複製程式碼 |
SET character_set_client = utf8; SET character_set_results = utf8; SET character_set_connection = utf8; |
附錄:
朋友的一個站點轉到我這邊。匯入mysql時,mysql還是latin的編碼,因此,雖然按上面的步驟,在/etc/my.cnf檔案中[client],[mysqld],[mysql]欄位裡新增default-character-set=utf8,但站點部分中文是亂碼。在將mysql編輯改為utf8再重新匯入資料庫後,就正常了。
估計是mysql是latin編碼是,匯入資料時,因為mysql無法識別,直接將資料儲存成了???這種亂碼的形式了