2017-04-25 43 views
0

我有點不解的看着這對MySQL的MySQL,相等還是不相等?

SELECT 1='1x'; 

給了我1

SELECT 1='2x'; 

給我0(預期)

當執行二進制比較

SELECT CAST(1 AS BINARY)=CAST('1x' AS BINARY); 

它給了我0(也如預期的那樣)

問題:如何阻止MySQL的行爲如此?我想'='作爲100%二進制平等。我不希望MySQL假設或猜測我想要比較的東西。

+0

不要把值作爲字符串:https://dev.mysql.com/doc/refman/5.7/en/bit-value-literals.html。 –

回答

4

當比較字符串和數字時,MySQL會自動進行轉換。

因此,字符串被轉換爲一個數字,它從左到右開始並嘗試從中創建一個數字。

所以

'1x' => 1 
'x1' => 0 //because it does not start with a number on the left 

你不能改變這種行爲。無論如何你都不應該比較不同的數據類型。所以這是你的錯:)

+0

感謝您澄清這一點。我沒有意識到這一點。這是我第一次將字符串與整數值進行比較,因爲它是由數據庫模式定義的。那麼我是否通過將這兩個值都作爲二進制值進行安全處理?或者還有什麼我可能不得不考慮的警告。 – Juergen

+0

比較'1 ='1x''是完全錯誤的。如果你知道一邊有一個字符串,然後與另一邊的字符串進行比較。 ' '1X'='1x'' –