1
我查询的INT
列一个字符串,像这样:MySQL的意外返回结果为 “WHERE integer_column = 'STRING_VALUE'”
SELECT id
FROM (`navigation_links`)
WHERE `navigation_links`.`navigation_link_id` = 'anyRandomString'
(原来,这是由意外)
- 预期的结果:
0
,因为navigation_link_id
是INT
- 实际结果:这好像又回到每一行,其值是
0
这将返回完全相反的:
SELECT id
FROM (`navigation_links`)
WHERE `navigation_links`.`navigation_link_id` != 'anyRandomString'
下面是表,剥离下来:
CREATE TABLE `navigation_links` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`navigation_link_id` INT(10) UNSIGNED NULL DEFAULT '0',
`navigation_group_id` INT(10) UNSIGNED NULL DEFAULT '0',
PRIMARY KEY (`id`)
)
任何想法,这是怎么一回事?
我明白了,所以在每个“数字”被选中之后,它会归结为“0”,然后呢?我注意到'where int ='3x''被转换为'3',但是'where int ='x3''被转换为'0'。我想这种转换有时候很有意义,但我对这种行为感到惊讶。 –
@Madmartigan:请注意只有前导数字才会被转换,而不是第一个连续的数字子串。这与C函数atoi和strtol的行为是一样的。 MySQL可能会使用其中的一个(快速浏览源代码会告诉你这是否是这样)。您可以使用'CAST'和'CONVERT'函数来查看MySQL将字符串转换为什么数字。 – outis