為什麼這樣的查詢不是語法錯誤?我有 SQL Server 背景,我真的很驚訝。
從 my_table WHERE id 中選擇 *
我認為它會驗證它是否具有值,但行為並不一致,使用 id 時它會返回具有 id 的位置,但使用 name 時它不會返回任何內容:
https://www.db-fiddle.com/f/enWGyAW4BtLC64PVzkbTVK/0
P粉5118967162023-09-17 00:12:37
MySQL 有一些不符合標準 ANSI SQL 的行為。在這種情況下,MySQL 將整數零值視為 false
,將任何整數非零值視為 true
。在標準 SQL 中,整數與布林值不同,但在 MySQL 中卻是。
當您執行查詢WHERE id
時,它會傳回id <> 0
的行。
當您執行查詢WHERE name
時,它將字串計算為整數,這表示採用前導數字字元(如果有)的數值,並忽略任何後續的非數字字元。如果沒有前導數字,則字串的整數值為 0。
當您執行查詢WHERE name
時,只有當該列中儲存的字串具有非零前導數字時,它才會傳回行。在您的範例 'outro'
中,它只有非數字,因此該值為零,無法滿足條件。
MySQL 的行為符合設計,但這不是標準 SQL。