Mysql儲存過程內中文亂碼,如何處理

2021-09-01 11:00:27 字數 943 閱讀 4582

mysql儲存過程內中文亂碼,如何處理

問題如下:在mysql自帶的test資料庫中建立如下測試表t3:

create table `t3` ( 

`name` varchar(33) default null

) engine=innodb default charset=utf8

name欄位的字符集也是utf8,再建立下述儲存過程addname:

create definer=`root`@`%` procedure `addname`()

begin

#routine body goes here...

insert into t3 values ('測試');

end

通過odbc資料來源連線該資料庫,將鏈結的字符集設為gb2312,通過應用程式呼叫此資料來源來訪問mysql,呼叫儲存過程addname(),出現錯誤data too long for column 'name' at row 1

出錯原因:gb2312的鏈結在理解儲存過程的'測試' 認為是gb2312編碼,再插入到t3的name欄位上時有個隱式轉化,從gb2312編碼轉為utf8編碼。(可能是這個原因,目前做測試還不能肯定就是它)

解決途徑:

讓gb2312一開始就用為'測試' 是utf8編碼,將儲存過程改為以下:

create definer=`root`@`%` procedure `addname`()

begin

#routine body goes here...

insert into t3 values (convert(_utf8'測試' using utf8));

end

經測試該方法通過。

mysql儲存中文亂碼

前端頁面,封裝到html裡的中文可以顯示,和後台相關的中文顯示都是 檢視network請求,傳參正常。檢視mysql編碼,是utf8。再看連線資料庫的jdbc設定,也是utf8。問了同事,把 etc mysql conf.d mysql.cnf 填充以下內容即可 client default cha...

解決docker容器內中文亂碼問題

docker容器內,後台中一些html模板檔案讀取時中文發現亂碼 locale a檢視容器所有語言環境 進入容器 docker exec it 容器id bash root 41056165bd6f locale a cc.utf8 posixc.utf 8可以支援中文,只需要把容器編碼設定為c.u...

PL SQL出現儲存過程注釋中文亂碼

進入pl sql命令列視窗輸入 select userenv language from dual 查出資料庫字符集 輸入 select from v nls parameters 查出nls language位本地字符集。在系統環境變數中增加乙個變數nls lang,值設定位select user...