1. 程式人生 > >從MySQL資料庫獲取中文顯示亂碼解決方案

從MySQL資料庫獲取中文顯示亂碼解決方案

參考連結:https://www.cnblogs.com/jasonzeng/p/8341445.html.
參考連結:https://bbs.csdn.net/topics/390881914

顯示亂碼有許多原因:
這裡主要是MySQL資料庫中 因為【編碼不統一】造成的
Latin1是ISO-8859-1的別名,有些環境下寫作Latin-1,最終要改為utf-8
在資料庫中輸入查詢命令:
修改成功後的檢視介面:
這張圖來之不易
登入MySQL : mysql -u root -p
回車
輸入密碼
輸入:show variables like ‘%char%’ ; #分號別忘了

如果您之前使用 set character_set_XXX=utf8 沒效果,請對配置檔案進行配置!!

我的預設my.ini在 C:\ProgramData\MySQL\MySQL Server 5.7下
在裡面增加或修改:
#符號是配置檔案的註釋,在其後面的都不會執行!
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci #MySQL 5之後的版本要加這一行

因為我的MySQL安裝位置在C:\Program Files\MySQL\MySQL Server 5.7,所以複製一份my.ini到 安裝目錄下。
複製my.ini


#拓展知識
[mysql] #客戶端的工具,執行sql命令
[mysqld] #伺服器端,用來啟動MySQL資料庫服務

重啟MySQL57 服務。
再次執行命令工具:發現已經生效,真舒服!

注意點來了!
進入Navicat新建查詢發現還是沒變:
顯示如下:
顯示mysql的全部編碼
是因為上面修改成功的對以後新建的資料庫才生效!
之前建的資料庫的還是原樣!

//////////////////////// 下面的不用看,沒效果,只是自己留作參考 /////////////////////////

MySQL設定的變數的也有範圍
1、session範圍

在資料庫中查詢命令中輸入修改字元編碼:
character_set_client=utf8
character_set_connection=utf8
set character_set_server=utf8
character_set_results=utf8
set character_set_database=utf8

屬性的意思:
character_set_client為客戶端編碼方式;
character_set_connection為建立連線使用的編碼;
character_set_database資料庫的編碼;
character_set_results結果集的編碼;
character_set_server資料庫伺服器的編碼;

只要保證以上四個採用的編碼方式一樣,就不會出現亂碼問題。
輸入show variables like ‘%char%’
發現設定生效,可以看到字符集已經修改成都是utf8了。
!!!!!! 但是 !!!!!!!!這裡有一個問題,當你重新開啟一個命令視窗或重新開啟資料庫的時候,編碼又會變為原來的latin1。伺服器提取的時候中文還是亂碼!!
【該方法不適合一勞永逸!】

2.2、global範圍

mysql設定變數的範圍預設是session範圍。如果設定多個會話的字符集那麼需要設定global範圍: Set [global|session] variables …
如:
set global character_set_database=utf8
set global character_set_server=utf8
此處省略幾行,參照session設定
輸入:
show variables like ‘%char%’;
按理說應該變成utf8。但是沒出現效果。
而且資料庫重啟的時候,你們發現設定global範圍的值又變成latin1了。