mysql插入資料時,中文亂碼問題的解決

2022-08-28 16:27:21 字數 2679 閱讀 5416

當向 mysql 資料庫插入一條帶有中文的資料形如 insert into employee values(null,'張三','female','1995-10-08','2015-11-12','sales',2000,'是個好員工!'); 出現亂碼時,可以使用語句 show variables like 'character%'; 來檢視當前資料庫的相關編碼集。

從上圖中可以看到 mysql 有六處使用了字符集,分別為:client 、connection、database、results、server 、system。其中與伺服器端相關:database、server、system(永遠無法修改,就是utf-8);與客戶端相關:connection、client、results 。

client

為客戶端使用的字符集。

connection

為連線資料庫的字符集設定型別,如果程式沒有指明連線資料庫使用的字符集型別則按照伺服器端預設的字符集設定。

database

為資料庫伺服器中某個庫使用的字符集設定,如果建庫時沒有指明,將使用伺服器安裝時指定的字符集設定。

results

為資料庫給客戶端返回時使用的字符集設定,如果沒有指明,使用伺服器預設的字符集。

server

為伺服器安裝時指定的預設字符集設定。

system

為資料庫系統使用的字符集設定。

了解了上面的資訊我們來分析下亂碼的原因,問題出在了當前的 cmd 客戶端視窗,因為當前的 cmd 客戶端輸入採用 gbk 編碼,而資料庫的編碼格式為 utf-8,編碼不一致導致了亂碼產生。而當前 cmd 客戶端的編碼格式無法修改,所以只能修改 connection、 client、results 的編碼集來告知伺服器端當前插入的資料採用 gbk 編碼,而伺服器的資料庫雖然是採用 utf-8 編碼,但卻可以識別通知伺服器端的 gbk 編碼資料並將其自動轉換為 utf-8 進行儲存。可以使用如下語句來快速設定與客戶端相關的編碼集:

設定完成後即可解決客戶端插入資料或顯示資料的亂碼問題了,但我們馬上會發現這種形式的設定只會在當前視窗有效,當視窗關閉後重新開啟 cmd 客戶端的時候又會出現亂碼問題;那麼,如何進行乙個一勞永逸的設定呢?在 mysql 的安裝目錄下有乙個 my.ini 配置檔案,通過修改這個配置檔案可以一勞永逸的解決亂碼問題。在這個配置檔案中 [mysql] 與客戶端配置相關,[mysqld] 與伺服器配置相關。預設配置如下:

這時只需要將下的預設編碼 default-character-set=utf8 改為 default-character-set=gbk ,重新啟動 mysql 服務即可。

當向 mysql 資料庫插入一條帶有中文的資料形如 insert into employee values(null,'張三','female','1995-10-08','2015-11-12','sales',2000,'是個好員工!'); 出現亂碼時,可以使用語句 show variables like 'character%'; 來檢視當前資料庫的相關編碼集。

從上圖中可以看到 mysql 有六處使用了字符集,分別為:client 、connection、database、results、server 、system。其中與伺服器端相關:database、server、system(永遠無法修改,就是utf-8);與客戶端相關:connection、client、results 。

client

為客戶端使用的字符集。

connection

為連線資料庫的字符集設定型別,如果程式沒有指明連線資料庫使用的字符集型別則按照伺服器端預設的字符集設定。

database

為資料庫伺服器中某個庫使用的字符集設定,如果建庫時沒有指明,將使用伺服器安裝時指定的字符集設定。

results

為資料庫給客戶端返回時使用的字符集設定,如果沒有指明,使用伺服器預設的字符集。

server

為伺服器安裝時指定的預設字符集設定。

system

為資料庫系統使用的字符集設定。

了解了上面的資訊我們來分析下亂碼的原因,問題出在了當前的 cmd 客戶端視窗,因為當前的 cmd 客戶端輸入採用 gbk 編碼,而資料庫的編碼格式為 utf-8,編碼不一致導致了亂碼產生。而當前 cmd 客戶端的編碼格式無法修改,所以只能修改 connection、 client、results 的編碼集來告知伺服器端當前插入的資料採用 gbk 編碼,而伺服器的資料庫雖然是採用 utf-8 編碼,但卻可以識別通知伺服器端的 gbk 編碼資料並將其自動轉換為 utf-8 進行儲存。可以使用如下語句來快速設定與客戶端相關的編碼集:

設定完成後即可解決客戶端插入資料或顯示資料的亂碼問題了,但我們馬上會發現這種形式的設定只會在當前視窗有效,當視窗關閉後重新開啟 cmd 客戶端的時候又會出現亂碼問題;那麼,如何進行乙個一勞永逸的設定呢?在 mysql 的安裝目錄下有乙個 my.ini 配置檔案,通過修改這個配置檔案可以一勞永逸的解決亂碼問題。在這個配置檔案中 [mysql] 與客戶端配置相關,[mysqld] 與伺服器配置相關。預設配置如下:

這時只需要將下的預設編碼 default-character-set=utf8 改為 default-character-set=gbk ,重新啟動 mysql 服務即可。

MySQL 插入資料時,中文亂碼問題

當向 mysql 資料庫插入一條帶有中文的資料形如 insert into employee values null,張三 female 1995 10 08 2015 11 12 sales 2000,是個好員工!出現亂碼時,可以使用語句show variables like character ...

MySQL插入資料時中文亂碼問題

當向 mysql 資料庫插入一條帶有中文的資料形如 insert into employee values null,張三 female 1995 10 08 2015 11 12 sales 2000,是個好員工!出現亂碼時,可以使用語句 show variables like character...

MySQL 插入資料時,中文亂碼問題的解決。

當向 mysql 資料庫插入一條帶有中文的資料形如 insert into employee values null,張三 female 1995 10 08 2015 11 12 sales 2000,是個好員工!出現亂碼時,可以使用語句 show variables like character...