mysql預存程序中 亂碼問題解決辦法

來源:互聯網
上載者:User

標籤:

中文亂碼無論在何時都是一個頭疼的問題,mysql的預存程序參數也同樣存在這個問題。
1、直接使用insert into語句沒問題,能夠正常插入漢字。
2、把insert into語句移到Procedure中後,就無法插入漢字了。在用戶端軟體中插入的漢字總是為亂碼,英文和數字沒問題。
3、如果在jdbc中調用這個Procedure總是報錯:

在查閱了很多相關資料後,發現只需要改動procedure的參數的定義就OK了,改動為:在varchar參數後面加入: character set 指定編碼。由於伺服器編碼為gbk,我指定為:

declare  v_title varchar(200)  character set gbk

再執行插入時就不會亂碼了 

 

寫個完整的 預存程序 供參考

create procedure copyDevTO_authKey()
    begin
          DECLARE var_userId int;
          DECLARE var_authkey varchar(512) character set gbk;
          DECLARE done INT DEFAULT 0;

          DECLARE cur_device CURSOR FOR select  userId,authkey from tbl_device;
          DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000‘ SET done = 1;
          SET done = 0;
          OPEN cur_device;
               -- loop  cursor
             FETCH cur_device INTO var_userId , var_authkey;
             WHILE done <> 1 DO
                      insert into tbl_user_authkey values (var_userId , var_authkey);
                      FETCH cur_device INTO var_userId , var_authkey;
             END WHILE;
           CLOSE cur_device;
    end
============================================================================

昨天下班前發現有個預存程序有問題,無法正確的查詢資料。

資料表和欄位都是 utf8 儲存的中文內容。在串連資料庫後也使用 SET NAMES utf8; 設定了編碼。但是在預存程序中無法查詢中文內容的欄位。由於一些邏輯處理的原因,預存程序使用了遊標,同時定義了一些局部變數。

 

CREATE PROCEDURE `PROC_FOOBAR`(id INTEGER)
BEGIN

DECLARE user_id VARCHAR(32) ;

– 省略代碼若干

END

user_id 在代碼中參與了一個 查詢 SELECT * FROM `table1` WHERE `UID` = user_id。

在預存程序中輸出 user_id 發現英文內容正常,但是中文內容亂碼。

開始以為預存程序的編碼有問題,但是不使用變數的內容又正常。上網查了一下,有人遇到同樣的問題:

http://www.google.com/url?sa=t&ct=res&cd=1&url=http%3A%2F%2Fbugs.mysql.com%2Fbug.php%3Fid%3D28567&ei=aNXhR-GwGJGq6wOtoaC0CA&usg=AFQjCNEy654sRAlz-r0xRYGcMuR34i0W3Q&sig2=LD5T7o5d_96SV3YpQJRROA

但是顯然,他的問題只要正確設定編碼即可。

突然靈光一現,NND,character set 這個東西我忽略了。正解如下:

CREATE PROCEDURE `PROC_FOOBAR`(id INTEGER)
BEGIN

DECLARE code, user_id VARCHAR(32) CHARACTER SET utf8;

– 省略代碼若干

END

mysql預存程序中 亂碼問題解決辦法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.