使用Navicat for Mysql查看工具,打開命令列界面,輸入show variables like '%char%';以下圖,查看當前mysql字符集設置狀況mysql
一、在查詢結果中能夠看到mysql 數據庫系統中客戶端、數據庫鏈接、數據庫、文件系統、查詢結果、服務器、系統的字符集設置 sql
二、在這裏,文件系統字符集是固定的,系統、服務器的字符集在安裝時肯定,與亂碼問題無關。亂碼的問題與客戶端、數據庫鏈接、數據庫、查詢結果的字符集設置有關 數據庫
*注:客戶端是看訪問mysql 數據庫的方式,經過命令行訪問,命令行窗口就是客戶端,通 過JDBC 等鏈接訪問,程序就是客戶端 瀏覽器
默認設置狀況下,mysql的默認字符集爲latin1(ISO_8859_1),若要操做中文字符則須要修改字符集:服務器
修改默認字符集
(1) 最簡單的修改方法,就是修改mysql的my.ini文件中的字符集鍵值,工具
在[client]下面修改(若是沒有就添加):default-character-set = utf8網站
在[mysql]下面設置(若是沒有就添加):default-character-set = utf8
在[mysqld]下面設置(若是沒有就添加):default-character-set=utf8
修改完後,重啓mysql的服務
(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 寫入中文數據時,在客戶端、數據庫鏈接、寫入數據庫時分別要進行編碼轉換。在執行查詢時,在返回結果、數據庫鏈接、客戶端也要分別進行編碼轉換。spa
一、在登陸數據庫時,咱們用mysql --default-character-set=字符集-u root -p 進行鏈接,這時咱們再用show variables like '%char%';命令查看字符集設置狀況,能夠發現客戶端、數據庫鏈接、查詢結果的字符集已經設置成登陸時選擇的字符集了。插件
二、若是是已經登陸了,可使用set names 字符集;命令來實現上述效果,等同於下面的命令:
set character_set_client = 字符集
set character_set_connection = 字符集
set character_set_results = 字符集
三、若是是經過JDBC 鏈接數據庫,能夠這樣寫URL:
URL=jdbc:mysql://localhost:3306/abs?useUnicode=true&characterEncoding=字符集
四、JSP 頁面等終端也要設置相應的字符集
五、數據庫的字符集能夠修改mysql 的啓動配置來指定字符集,也能夠在create database 時加上 default character set 字符集來強制設置database 的字符集
六、經過這樣的設置,整個數據寫入讀出流程中都統一了字符集,就不會出現亂碼了
一、能夠明確的是從命令行下,客戶端、數據庫鏈接、查詢結果的字符集設置沒有變化輸入的中文通過一系列轉碼又轉回初始的字符集,咱們查看到的固然不是亂碼但這並不表明中文在數據庫裏被正確做爲中文字符存儲。
二、舉例:如今有一個utf8 編碼數據庫,客戶端鏈接使用GBK 編碼,connection 使用默認的ISO8859-1(也就是mysql 中的latin1),咱們在客戶端發送「中文」這個字符串,客戶端將發送一串GBK 格式的二進制碼給connection 層,connection 層以ISO8859-1 格式將這段二進制碼發送給數據庫,數據庫將這段編碼以utf8 格式存儲下來,咱們將這個字段以utf8格式讀取出來,確定是獲得亂碼,也就是說中文數據在寫入數據庫時是以亂碼形式存儲的,在同一個客戶端進行查詢操做時,作了一套和寫入時相反的操做,錯誤的utf8 格式二進制碼又被轉換成正確的GBK 碼並正確顯示出來。
UTF-8:Unicode Transformation Format-8bit,容許含BOM,但一般不含BOM。是用以解決國際上字符的一種多字節編碼,它對英文使用8位(即一個字節),中文使用24爲(三個字節)來編碼。UTF-8包含全世界全部國家須要用到的字符,是國際編碼,通用性強。UTF-8編碼的文字能夠在各國支持UTF8字符集的瀏覽器上顯示。如,若是是UTF8編碼,則在外國人的英文IE上也能顯示中文,他們無需下載IE的中文語言支持包。 GBK是國家標準GB2312基礎上擴容後兼容GB2312的標準。GBK的文字編碼是用雙字節來表示的,即不論中、英文字符均使用雙字節來表示,爲了區分中文,將其最高位都設定成1。GBK包含所有中文字符,是國家編碼,通用性比UTF8差,不過UTF8佔用的數據庫比GBD大。 GBK、GB2312等與UTF8之間都必須經過Unicode編碼才能相互轉換: GBK、GB2312--Unicode--UTF8 UTF8--Unicode--GBK、GB2312 對於一個網站、論壇來講,若是英文字符較多,則建議使用UTF-8節省空間。不過如今不少論壇的插件通常只支持GBK。 GB2312是GBK的子集,GBK是GB18030的子集 GBK是包括中日韓字符的大字符集合 若是是中文的網站 推薦GB2312 GBK有時仍是有點問題 爲了不全部亂碼問題,應該採用UTF-8,未來要支持國際化也很是方便 UTF-8能夠看做是大字符集,它包含了大部分文字的編碼。 使用UTF-8的一個好處是其餘地區的用戶(如香港臺灣)無需安裝簡體中文支持就能正常觀看你的文字而不會出現亂碼。 gb2312是簡體中文的碼 gbk支持簡體中文及繁體中文 big5支持繁體中文 utf-8支持幾乎全部字符