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