1. 程式人生 > >linux下mysql中文亂碼(中文問號)解決辦法

linux下mysql中文亂碼(中文問號)解決辦法

今天發現我mysql插入中文時老出現????號了,但儲存英文是沒有問題的,下面我來給各位同學介紹一下linux下mysql中文亂碼解決方法。 linux下則需要修改/etc/my.cnf,在[mysqld]下加入default-character-set = utf8,[client]下加入default-character-set = utf8,在[mysql]欄位里加入default-character-set=utf8

實現:
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]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8

[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
character-set-server=utf8

[mysql]
no-auto-rehash

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無法識別,直接將資料儲存成了???這種亂碼的形式了