如果我的简单 varchar 字段包含“?”,我正在从 TOAD 执行 MySQL 脚本(插入)或“:”,TOAD 要求我绑定(bind)变量 (@f0),而我只想插入“?”和句子中的“:”字面上。
我需要 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');
这个语句要求绑定(bind)变量@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 中尝试时,它工作正常,它处理“?”确实在每个插入中。
最佳答案
This is not (yet) an answer but more detailed questions:
我怀疑发生的情况是字符串以某种方式被转义,因此 SQL 没有意识到 ?
/:
是文字。
你有吗read the manual ?
TOAD 是否自动转义给它的 SQL 命令(即双重转义)?
您可以直接使用 MySQL 命令行来查看问题是否仍然出现吗?
您可以尝试使用不包含引号、转义或其他方式的字符串
在这里插入数据吗?
,看看这些因素是否相关?如果您无法使用命令行,您可以尝试使用其他 SQL 接口(interface),看看问题是否是 TOAD 特有的?
您能否检查一下 TOAD 设置,以确保它没有被设置为自动以某种方式期望每个 SQL 都是准备好的语句。 (是的,抓着救命稻草......但一定要检查设置!)
关于mysql - 为什么使用 "?"和 ":"等字符的简单 varchar 插入要求在 MySQL 中绑定(bind)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44105899/