1. 程式人生 > >Windows系統下MySQL中文亂碼問題

Windows系統下MySQL中文亂碼問題

雖說在Windows的伺服器上搭建Web應用一般很少用到MySQL,但是本人技術欠佳且囊中羞澀,MySQL因為免費性和學習成本較低則成了我的首選。
1.執行環境
近日,因為畢業設計需要搭建一個ASP.net的課程學習網站,裡面用到MySQL資料庫,而且導師還要求部署上伺服器,無奈只能租一個騰訊雲的Windows伺服器進行部署。
資料庫的版本是MySQL 5.7 Windows版,應用程式是 ASP.net MVC 5,跑在IIS8上面。
2.中文亂碼
部署一切順利,執行訪問都沒問題,但是一旦插入中文字元就變成‘???’。直覺告訴我應該是編碼問題了。為了操作方便,本人這裡用MySQL Workbench進行演示,實際上應該更多的使用命令列。
1.雙擊選中dump。
2.執行查詢 show variables like ‘char%’;
在這裡插入圖片描述

可以看到圖中的character_set_connection和character_set_server是lantin1,大概這就是中文出現亂碼的原因了吧,接下來我們要把圖中所有的lantin1改成utf8.

3.修改編碼
網上隨便一搜能搜到很多解決方案,大致分為兩種:
通過 set character_set_server = utf8; 語句來進行設定,這種方法只是設定該資料庫的字符集編碼,MySQL中其他資料庫的編碼依舊是lantin1。就算修改全域性 set global character_set_database=utf8; 重啟之後還是會變回lantin1。
所以,我們需要採用另一種方法,通過修改MySQL配置檔案來改變字符集編碼。首先,在Windows下,我們需要找到一個 my.ini 的檔案。網上很多教程都說它在MySQL資料夾下面,但這其實很容易誤導,因為在MySQL安裝時,程式檔案和資料檔案是分開存放的,很多人在MySQL資料夾下找不到my.ini就是因為它是作為資料檔案放在資料資料夾裡面。而這個資料資料夾在Windows下面是隱藏的。
要找到它,先隨便開啟一個資料夾,在路徑欄裡面輸入 %ProgramData% 回車。進入隱藏資料夾,找到MySQL資料夾,進入找到MySQL Server 5.7資料夾,進入就能看到my.ini了。
在這裡插入圖片描述

這裡只需要用記事本開啟,然後修改一些東西就好了。如果對ini檔案不熟悉的同學可以先百度補充一波ini的知識再操作。
1.在 [client] 節下面增加character-set-server=utf8
2.在 [mysqld] 節下面增加character-set-server=utf8
3.在 [mysql] 節下增加default-character-set=utf8
4.這裡要注意的是,這個ini檔案不是以’;‘標記註釋的,是以’#‘標記註釋的,所以在檔案中可以看到很多#。在 [mysqld] 和 [mysql] 節下面本來就有character-set-server和default-character-set 配置,只不過用’#‘註釋了,要把’#'去掉。
5.至於在哪一行加都無所謂,ini檔案中哪行沒有關係,只要在規定的節裡面就好了。

4.重啟MySQL服務
如果有用MySQL Notifier的話,直接在那裡點restart就好了,如果沒有的話,就用命令列吧。Win+R -> cmd -> net stop mysql -> net start mysql。

5.設定資料庫編碼
現在我們已經設定好了MySQL的預設字符集編碼,接下來為了安全起見,我們還要繼續檢查一下資料庫的字符集編碼,用 show variables like ‘char%’; 檢視選中資料庫的字符集編碼,看看 character_set_connection 和 character_set_server是否變成了utf8。如果沒變的話,檢查一下資料庫的Collation是不是utf8。如果不是則需要設定成utf8。

ALTER SCHEMA DB_Name DEFAULT CHARACTER SET utf8 ;
set character_set_server = utf8;
set character_set_connection = utf8;

6.命令列操作
其實我個人是比較鼓勵用命令列對MySQL進行設定的,不過考慮到效率和正確性,還是需要裝上WorkBench進行一些輔助。
1.進入MySQL命令列模式
Win+R -> cmd -> cd 你安裝MySQL資料夾裡面的bin資料夾
mysql -u root -p
輸入密碼
2.檢視資料庫字符集編碼
use 資料庫名
show variables like ‘char%’;
注意每句都要有’;’
3.設定字符集編碼
set character_set_server=utf8;
set character_set_connection=utf8;

4.退出
exit