Mysql 存储过程 问题

vga 发布于 2014/06/07 08:53
阅读 202
收藏 0

MySQL 5.6.16 & 5.0.90

os: windows 7

建表语句:

CREATE TABLE `tb_demo` (
 `ID` INT(11) NOT NULL AUTO_INCREMENT,
 `Path` VARCHAR(8192),
  PRIMARY KEY (`ID`)
)
COLLATE='utf8_general_ci';

INSERT INTO `tb_demo` (`ID`,`Path`) VALUES (1, null);

存储过程:

CREATE  PROCEDURE `TestUpdate`(IN `Data_ID` INT, IN `EntryData` VARCHAR(8192))   
BEGIN
   SET @SQL0=CONCAT('UPDATE tb_demo SET `path`="',EntryData,'" WHERE `ID`=',DATA_ID);
   PREPARE STMT FROM @SQL0;
   EXECUTE STMT;  
   DEALLOCATE PREPARE STMT;
END;

调用:

CALL `TestUpdate`('1', 'c:\\dir1\\jpg\\');     -- 出错

CALL `TestUpdate`('1', 'c:\\dir1\\jpg');       -- 不出错,但数据中的 \\ 全部丢失

这是什么问题呀? 

 

加载中
0
len
len

你为什么不直接写

BEGIN


UPDATE tb_demo set path = EntryData where id = DATA_ID;
END

0
len
len
CALL `TestUpdate`('1', 'c:\\\\dir1\\\\jpg');   CONCAT把\当转译字符处理了。
0
vga
vga

手册里写明 转移符 只要 双写 即可,但这里却要你 4 写 呀!!!

看来只有这样 变态的写法 Mysql 才能工作OK!!!

0
H
Heysion

\\ 符号是要转义的...貌似,,,建议你采用

con.prepareCall("{? = call MYLOCATE(?,?)}");

返回顶部
顶部