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...