傳智播客旗下品牌:|||||

全國咨詢/投訴熱線:400-618-4000

JavaEE技術點:MySQL編碼問題

更新時間:2017年12月26日16時02分 來源:傳智播客

我們在dos窗口下使用命令操作數據庫時,當向數據庫中插入的數據或從數據庫中查詢的數據中包含中文時,就會出現亂碼。出現亂碼的原因是我們安裝MySQL數據庫服務器時已經指定了編碼是utf8,而dos窗口的默認編碼是gbk,也就是說客戶端與服務器的編碼不一樣,這樣就導致了亂碼。

使用如下命令可以查看MySQL數據庫編碼:

l SHOW VARIABLES LIKE 'char%'

使用以上命令查看數據庫編碼,如圖1-1所示:

MySQL數據庫

圖1-1 查看數據庫編碼

如圖1-1所示,數據庫的編碼是utf8,下面我們來介紹其中兩項編碼:

l character_set_client=utf8:客戶端通知數據庫服務器它的編碼方式:

Ø 客戶端即dos窗口發送的數據是gbk編碼;

Ø MySQL使用character_set_client指定的編碼來解讀客戶端發送過來的數據,例如編碼為UTF8;

Ø 結果:客戶端發送過來的數據不是UTF8編碼,那么就會出現亂碼;

l character_set_results=utf8:數據庫服務器向客戶端發送的數據使用utf8編碼:

Ø MySQL會以character_set_results指定的編碼方式將待發送的數據編碼,然后發送給客戶端,例如編碼為UTF8;

Ø 客戶端不使用UTF8來解讀,而是使用gbk編碼來解讀;

Ø 結果:客戶端不是使用UTF8來解讀,那么就會出現亂碼。

下面我們來試驗一下,首先向數據庫服務器端發送數據,如圖1-2所示:

MySQL數據庫

圖1-2 插入數據亂碼

圖1-2中,在dos窗口下向數據庫服務器發送數據,數據中包含中文“張三”,“張三”在dos窗口下是gbk編碼,但是數據庫服務器使用utf8進行解碼,就出現亂碼,因此插入失敗。

解決辦法:

l 讓客戶端發送utf8的數據:在dos窗口下,它的編碼就是gbk,很難修改,因此該方法是行不通的;

l 將character_set_client的值修改為gbk:通過命令:set character_set_client=gbk通知數據庫服務器客戶端的編碼是gbk,但是該方法有一個局限性,它只在當前dos窗口中有效,只要退出訪問mysql,那么再次登錄時這個值需要重新設置。

下面,我們使用第二種解決辦法來解決亂碼,如圖1-3所示:

MySQL數據庫

圖1-3 解決插入數據中文亂碼問題

圖1-3中向student表中插入一條數據,下面我們來查詢該表的記錄,如圖1-4所示:

MySQL數據庫

圖1-4 查詢student表

圖1-4中,查詢的數據出現亂碼。

解決辦法:

l 讓服務器發送gbk編碼的數據:使用命令:set character_set_results=gbk將服務器發送數據的編碼設置為gbk,該方法有一個局限性,它也只對當前的dos窗口有效,關閉窗口或退出就需要重新設置;

l 讓dos窗口使用utf8編碼來解讀數據:dos窗口的編碼是gbk,很難改變,因此該方法是行不通的。

下面,我們使用以上方法中的第二種方法來解決查詢數據亂碼問題,如圖1-5所示:

MySQL數據庫

圖1-5 查詢student表

以上解決插入數據中文亂碼,和查詢數據中文亂碼的方法都只對當前dos窗口有效,當關閉窗口或退出,再次登錄時又需要重新設置。這種方法不是長久之計,下面給大家介紹一個一勞永逸的方法,如下:

在MySQL的安裝目錄下有一個my.ini文件,如圖1-6所示:

MySQL數據庫

圖1-6 my。ini文件

打開圖1-6所示中的my.ini文件,找到如圖1-7所示的代碼:

MySQL數據庫

圖1-7 my.ini文件內容

將圖1-7中,用紅線標注的:default-character_set=utf8修改為default-character-set=gbk,如圖1-8所示:

MySQL數據庫

圖1-8 修改client編碼

圖1-8中,修改了default-character-set的編碼為gbk,有以下作用:

l 將character_set_client的值修改為gbk:解決插入數據中文亂碼問題;

l 將character_set_results的值修改為gbk:解決查詢數據中文亂碼問題;

l 將character_set_connection的值修改為gbk。

修改了my.ini文件之后需要重啟MySQL服務,然后再次查詢數據庫編碼如圖1-9所示:

MySQL數據庫

圖1-8 重新啟動MySQL服務

現在我們再次查看student表,看張三是否還是亂碼,如圖1-9所示:

MySQL數據庫

圖1-9 查看是否亂碼

以上都是解決在dos窗口下操作數據庫時的亂碼問題,我們安裝了SQLyog工具之后,在該工具中使用sql語句操作數據庫時,它的編碼就是utf8,因此不會出現亂碼問題,我們以后操作數據庫也不再使用dos窗口,而是使用SQLyog工具。

本文版權歸傳智播客JavaEE學院所有,歡迎轉載,轉載請注明作者出處。謝謝!
作者:傳智播客JavaEE培訓學院
2019免费网赚项目 智慧彩票投注 2019年最新挂机网赚 月入数万的网赚是真的吗 金旋风网赚 山东群英会直播 2019年最好的网赚项目 快乐赛车投注规律 马云支付宝网赚是真的吗 几个可靠真实的网赚