2014-10-30 56 views
0

我不知道這是一個錯誤還是什麼。我有一個簡單的MySQL表稱爲table一個名爲id列是BIGINT UNSIGNED NOT NULL即使提供的錯誤值,MYSQL返回結果

我有ID 1一排,當我運行此查詢:

SELECT * FROM table WHERE id = '1dasfrf' 

和令人驚訝地返回行ID 1結果行!由於提供了無效值,它不應返回任何內容。 MYSQL表的類型是innoDB如果這是相關的

所以總之,如果你把任何非數值後的行值,它會返回該行。這當然與所有的id值不只是1

+0

它會變得更糟:'創建表foo(ID VARCHAR(20) );插入foo值('1x'),('xy');從foo刪除其中的id;' – 2014-10-30 23:04:06

回答

1

這不是一個錯誤。幕後發生了很多「魔術」。 在這種情況下,你可以在這裏閱讀有關轉換:http://dev.mysql.com/doc/refman/5.7/en/type-conversion.html

如果你不想自動類型轉換,你可以使用嚴格模式:http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-strict

+0

那麼有沒有解決方案? – 2014-10-30 22:57:01

+0

更新了建議。 – msfoster 2014-10-30 22:59:51

+0

嚴格模式不會改變問題中的行爲。 – 2014-10-30 23:02:51