1
我使用MySQL,我有一個字段,類型爲varchar(50)
,並將其命名爲email
,如果我執行這樣的查詢:凡場= 0返回所有記錄
SELECT * FROM `users` WHERE email =0
它返回表中的所有記錄。這怎麼可能?
例子:
記錄其中之一:[email protected]
這也查詢返回該行。
爲什麼會發生這種情況,以及如何避免這種情況?
我使用MySQL,我有一個字段,類型爲varchar(50)
,並將其命名爲email
,如果我執行這樣的查詢:凡場= 0返回所有記錄
SELECT * FROM `users` WHERE email =0
它返回表中的所有記錄。這怎麼可能?
例子:
記錄其中之一:[email protected]
這也查詢返回該行。
爲什麼會發生這種情況,以及如何避免這種情況?
當您將字符串字段與數字進行比較時,會將該字符串轉換爲數字,然後比較這些數字。將字符串轉換爲數字使用字符串開頭的數字;如果它不以數字開頭,則它將轉換爲0
。
所以,如果你有一個像[email protected]
這樣的電子郵件它不會被退回,因爲這將轉換爲12
。但[email protected]
轉換爲0
。
你應該寫WHERE email = '0'
比較它與字符串而不是數字。或者,如果你想測試一個空的電子郵件,請使用WHERE email = ''
。
你試圖用這個測試來實現什麼。如果你想過濾NULL,你需要寫'IS NULL'... –
不,我在緩慢的查詢列表上看到了這個查詢。 –
如果你的電子郵件地址是varchar,你應該將它與'email ='0''或'email ='''等引號進行比較......將它與一個數字進行比較是錯誤的,它可能試圖將所有的電子郵件轉換爲數字並比較它與零其中任何字符串返回1這是真的 –