【发布时间】:2018-03-09 13:26:07
【问题描述】:
我的桌子是这样的:
| a | ts_9 | ts_11 |
|----|------|-------|
| yx | 0 | |
| xy | 0 | |
由于某种原因,当我调用时,行会返回:
SELECT * FROM things WHERE ts_9 IN ("asdewdwedewd") OR ts_11 IN ("asdewdwedewd")
为什么会这样?
随意使用复制粘贴在您的数据库中重新创建它:
CREATE TABLE `things` (
`a` char(12) NOT NULL DEFAULT '',
`ts_9` decimal(2,0) NOT NULL,
`ts_11` char(1) NOT NULL DEFAULT '',
PRIMARY KEY (`a`),
UNIQUE KEY `a` (`a`) );
INSERT INTO `things` (`a`, `ts_9`, `ts_11`) VALUES ('yx', '0', ''), ('xy', '0', '');
【问题讨论】:
-
我的猜测是字符串被转换成整数。
-
@Uueerdo 很好的猜测,谢谢!有没有通用的预防措施来避免这种情况?
-
我唯一能想到的就是不要在涉及相等的表达式中混合数字和字符串类型,除非你能保证字符串解析正确。
-
请注意
x IN (single-item)与x = single-item基本相同。
标签: mysql sql where-clause where-in