1. 程式人生 > >資料亂碼問題—更改mysql字元編碼

資料亂碼問題—更改mysql字元編碼

作為一名程式猿,幾乎每天都在跟編碼格式,亂碼作鬥爭,如何你沒有被亂碼虐過,你肯定不好意思說你是一枚優秀的程式設計師。這不是今天我也被亂碼血洗了一遍,下面說一下我需要的問題,和解決問題的思路。

忠告:

每次搭建環境的時候一定要統一了編碼格式,主要包括:瀏覽器、IDE(比如eclipse)、資料庫(比如Mysql)、jsp頁面的編碼、伺服器(比如Tomcat)和其他(比如我們使用maven等)

今天將工作流模組跑起來之後,發現自己新增的資料,每次讀出來都是亂碼,而且只要經過自己修改的資料都變成了亂碼。然後開始排查。因為其他都沒有錯而且設計編碼格式比較簡單,就不在這裡詳細說明了,本篇文章只是解決一個mysql設定編碼格式的問題。

步驟

1.查看了瀏覽器和IDE的環境,發現都是UTF-8的。
2.然後檢查了jsp頁面,也都是UTF-8的。注:大家在新建jsp頁面的時候,記得修改程式設計格式(包括引入頁面的編碼格式)。
3.檢查了tomcat的編碼,也是UTF-8的。
4.檢查mysql編碼,發現最後的問題就是出在mysql。

誤區

因為使用了Navicat Premium,所以我第一反應就是在客戶端修改了資料庫的編碼,可是發現還是亂碼,然後修改了my.ini檔案裡面的字符集,發現還是沒有解決問題。最後發現,修改完my.ini檔案之後,必須重啟mysql服務,記住不是重新連線資料庫,是重啟mysql服務,如果你沒有使用命令的習慣,就去資源管理器中將mysql服務重啟。

正確的解決方案:

一:檢視預設字符集

預設情況下,mysql的字符集是latin1(ISO_8859_1),通常,檢視系統的字符集和排序方式的設定可以通過下面的兩條命令:

mysql> SHOW VARIABLES LIKE ‘character%’;
+————————–+———————————+
| 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 |C:\Program Files\MySQL\MySQL Server 5.5\share\chars
ets\
|
+————————–+———————————+

mysql> SHOW VARIABLES LIKE ‘collation_%’;
+———————-+—————–+
| Variable_name | Value |
+———————-+—————–+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+———————-+—————–+

二:修改預設字符集

(1)簡單的修改方法,就是直接修改mysql的my.ini檔案中的字符集鍵值。

(2)使用mysql的命令

 mysql> SET character_set_client = utf8 ;
 mysql> SET character_set_connection = utf8 ;
 mysql> SET character_set_database = utf8 ;
 mysql> SET character_set_results = utf8 ;
 mysql> SET character_set_server = utf8 ;

 mysql> SET collation_connection = utf8 ;
 mysql> SET collation_database = utf8 ;
 mysql> SET collation_server = utf8 ;

三:重啟mysql的服務

service mysql restar或者直接在資源管理器中找到mysql服務,直接重啟。

附:我們也可以執行 :mysql>alter database mydb character set utf8;來修改已經建立的資料庫字符集

總結

其實團體開發需要我們提前統一好各種工具使用的編碼格式,這樣可以減少很多麻煩,而且我們每個人安裝工具的時候也要根據團隊要求設定好編碼格式。當然,有時候即使我們嚴格按照要求來設定,依舊會出現亂碼,這時候就需要我們根據實際情況來解決,比如在程式碼中轉碼之類的,等遇到了再說。