Mysql 存貯過程參數中傳入漢字亂碼的解決辦法!

這個問題鬱悶我了我很久。問題是這樣的:

1、我使用insert語句沒問題,能夠正常插入漢字。

2、把insert語句移到Procedure中後,就無法插入漢字了。在客戶端軟件中插入的漢字總是爲亂碼,英文和數字沒問題。

3、如果在jdbc中調用這個Procedure總是報錯:

  • 在mysql 5.0下錯誤爲:Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'v_title' at row 1,這個提示完全是錯誤的。
  • 在mysql 5.2下錯誤爲:Cause: java.sql.SQLException: Incorrect string value: '\xBA\xBA\xD7\xD6\xB0\xA1' for column 'v_title' at row 1 這個提示還馬馬虎虎象樣。

存貯過程內容如下:

  1. DELIMITER $$   
  2.   
  3. DROP PROCEDURE IF EXISTS `comments`.`test`$$   
  4.   
  5. CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(   
  6. in v_title varchar(200)     
  7. )   
  8. BEGIN  
  9. insert into t1(t) values (v_title);   
  10.     END$$   
  11.   
  12. DELIMITER ;  

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

 修改後procedure內容如下:

sql 代碼
  1. DELIMITER $$   
  2.   
  3. DROP PROCEDURE IF EXISTS `comments`.`test`$$   
  4.   
  5. CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(   
  6. in v_title varchar(200)  character set gbk   
  7. )   
  8. BEGIN  
  9. insert into t1(t) values (v_title);   
  10.     END$$   
  11.   
  12. DELIMITER ;  

修改後,插入漢字一切都正常啦!

BTW:我在google中搜到有很多人提出了這個問題,但是無人回答。今天我在這裏也算一個解答吧。

如果沒有特別註明,本Blog文章豈爲原創。

轉貼請註明出處:    http://netbus.iteye.com

發佈了1 篇原創文章 · 獲贊 0 · 訪問量 3340
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章