为什么简单的varchar插入字符如“?”和“:”在MySQL中要求绑定变量?

时间:2017-05-22 06:22:52

标签: mysql toad

如果我的简单varchar字段包含“?”,我正在从TOAD执行MySQL脚本(插入)或“:”,当我想要的是插入“?”时,TOAD要求我绑定变量(@ f0)。和句子中的“:” LITERALLY

我需要 SET sql_mode ='PIPES_AS_CONCAT'并将“?”“:”的所有实例替换为 | | CHAR(63)|| 使其有效。如果我使用“\?”“\:”进行逃避,这是没有用的,就像逃避其他有用的特殊角色时一样。

INSERT INTO `specs` (`ID`, `ParentProductsID`, `SpecsGroup`, `SpecsSubGroup`, `SpecsSubGroup2`, `SpecsText`) VALUES (1289, 27, 'What\'s in the box?', '', '', 'User guide');

这个语句要求绑定变量@ f0,除非我这样做,它可以正常工作但更长:

SET sql_mode = 'PIPES_AS_CONCAT';
INSERT INTO `specs` (`ID`, `ParentProductsID`, `SpecsGroup`, `SpecsSubGroup`, `SpecsSubGroup2`, `SpecsText`) VALUES (1289, 27, 'What\'s in the box' || CHAR(63) || '', '', '', 'User guide');

有更简单的方法吗?

注意:我正在使用TOAD for MySQL,这可能不适用于我怀疑的其他SQL编辑器。

更新:当我在PHPMyAdmin中尝试时,它可以正常工作,它会处理“?”字面意思是每个插页。

1 个答案:

答案 0 :(得分:0)

  

这不是(尚未)答案,而是更详细的问题:

我怀疑发生的事情是字符串被转义,所以SQL没有意识到? / :是字面的。

你有read the manual吗?

  • TOAD是否自动转义给它的SQL命令(因此双重转义)?

  • 您是否可以直接使用MySQL命令行查看问题是否出现?

  • 您可以尝试使用不包含引号的字符串插入数据here?,转义或以其他方式查看这些因素是否相关?

  • 如果您不能使用命令行,是否可以尝试使用其他SQL接口,以查看问题是否特定于TOAD?

  • 您是否可以检查TOAD设置以确保它未被设置为自动地以某种方式期望每个SQL都是预备语句。 (是的,抓着稻草......但总是检查设置!