這個問題鬱悶我了我很久。問題是這樣的:
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 這個提示還馬馬虎虎象樣。
存貯過程內容如下:
- DELIMITER $$
- DROP PROCEDURE IF EXISTS `comments`.`test`$$
- CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(
- in v_title varchar(200)
- )
- BEGIN
- insert into t1(t) values (v_title);
- END$$
- DELIMITER ;
在查閱了很多相關資料後,發現只需要改動procedure的參數的定義就OK了,改動爲:在varchar參數後面加入: character set 指定編碼。由於服務器編碼爲gbk,我指定爲:in v_title varchar(200) character set gbk
修改後procedure內容如下:
- DELIMITER $$
- DROP PROCEDURE IF EXISTS `comments`.`test`$$
- CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(
- in v_title varchar(200) character set gbk
- )
- BEGIN
- insert into t1(t) values (v_title);
- END$$
- DELIMITER ;
修改後,插入漢字一切都正常啦!
BTW:我在google中搜到有很多人提出了這個問題,但是無人回答。今天我在這裏也算一個解答吧。
如果沒有特別註明,本Blog文章豈爲原創。
轉貼請註明出處: http://netbus.iteye.com