2016-03-01 108 views
0

我正在查看一些代碼,並且一些錯誤引起了我的注意。有人比較tinyint列和varchar值。Mysql:將tinyint列與varchar值進行比較

但令人驚訝的是,這是工作(因爲意圖是與數值0比較)。

示例查詢:

create table t1(x1 tinyint); 

insert into t1 values (0),(0), (1), (2); 

select * from t1 where x1 = 'live' 

結果:

x1 

0 

0 

Sqlfiddle

我的問題是,爲什麼(任意)VARCHAR值的行爲方式爲數值0的相同int/tinyint列?

+0

如果您需要將varchar列與int/tinyint列進行比較,那麼db設計可能有問題。 – jarlh

+0

請閱讀...一個bug引起了我的注意.. – user2407394

+0

對不起,沒有仔細閱讀,再次... – jarlh

回答

1

MySQL在數字上下文中靜靜地將字符串轉換爲數字。

它通過將前導數字字符轉換爲數字來實現。如果沒有數字,則值爲0.

因此,這相當於x1 = 0,因爲此轉換。

+0

不應該mysql給錯誤...這是奇怪的行爲.. – user2407394

+0

今天遇到這個,非常怪異的行爲。我期待一個錯誤或至少顯示一個空的結果 –

+0

@LuqmanSungkar。 。 。如果你使用'cast()',你會得到一個錯誤。隱式轉換不會產生錯誤 - 有時這很方便。 –

相關問題