1

我有一个从两个给定参数生成 SQL 查询的脚本:字段和值。最后,它会生成如下内容:

SELECT * FROM table WHERE <field> IN <value>;

到目前为止,没有什么严重的。但现在想象一下:你有一个包含字符串的字段,有时只包含数字,有时不包含。现在你给出一个 123 的值:

SELECT string FROM table WHERE string = 123;

由于 MySQL Autocasting,此查询将产生任何包含 123或以 123 开头的字符串的行。有什么办法可以禁用这种部分字符串的自动转换?我只想获得完全包含给定值的结果(强制转换与否)

简单的测试 SQL 这个小选择显示了问题:

SELECT '123abc' IN (123, 234, 'xyz');

注意:由于我的 SQL 是脚本生成的,我不能简单地将我的值转换为字符串或用大引号括起来。理想的解决方案是只操纵运算符返回equals,无论是什么类型。

4

1 回答 1

0

如果您希望将它们用作字符串,请引用您的参数。检查它是如何工作的:

SELECT '123abc' = '123'

如果您在构建查询时使用自动生成器自动引用值 - 选择一个支持数据库模式定义和根据列类型引用/转换值的值,而不是像您的示例中那样根据看似的值类型做出决定。

于 2013-11-04T12:39:44.367 回答