如果我的简单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中尝试时,它可以正常工作,它会处理“?”字面意思是每个插页。
答案 0 :(得分:0)
这不是(尚未)答案,而是更详细的问题:
我怀疑发生的事情是字符串被转义,所以SQL没有意识到?
/ :
是字面的。
你有read the manual吗?
TOAD是否自动转义给它的SQL命令(因此双重转义)?
您是否可以直接使用MySQL命令行查看问题是否出现?
您可以尝试使用不包含引号的字符串插入数据here?
,转义或以其他方式查看这些因素是否相关?
如果您不能使用命令行,是否可以尝试使用其他SQL接口,以查看问题是否特定于TOAD?
您是否可以检查TOAD设置以确保它未被设置为自动地以某种方式期望每个SQL都是预备语句。 (是的,抓着稻草......但总是检查设置!)