2015-04-17 55 views
0

如果我有一列是一個整數類型的,並具有該列中的0值的條目,比如像這樣:爲什麼在調整字符串時MySQL返回的值爲零?

+----------+---------------+----------------+ 
+ id (int) + name (string) + group_id (int) + 
+----------+---------------+----------------+ 
+ 1  + Albert  + 2    + 
+----------+---------------+----------------+ 
+ 2  + Harry   + 0    + 
+----------+---------------+----------------+ 

如果我要查詢SELECT * FROM users WHERE group_id = 'string',我會得到0

+----------+---------------+----------------+ 
+ 2  + Harry   + 0    + 
+----------+---------------+----------------+ 

是什麼依賴的group_id背部的結果呢?它同時發生在MyISAM和InnoDB上,如果允許group_idNULL也沒關係。

可以避免這種行爲嗎?

回答

0

它是因爲mysql將字符串計算爲0時,它們被轉換爲整數類型。由於您正在比較整數(id),它會自動將該字符串轉換爲兼容類型(整數)。

您可以測試/用下面簡單的查詢證明了這一點:

select cast('string' as unsigned)

在這裏,你投的字符串「字符串」無符號整數,其結果是0

爲了避免它:

  • 不要比較字符串到整數
  • OR
  • 將此ID與string相比較之前的 。但是,這將對 的重大成果產生負面影響。
0

當字符串不能被解釋爲數字(或者,如果它不能正常完成)它總是通過提供整數或只包含數字的字符串,返回0

而且這是可以避免的。

0

當比較的group_id的值,這是整數,字符串,MySQL的兩個值轉換爲浮點數(來源:http://dev.mysql.com/doc/refman/5.7/en/type-conversion.html

在字符串到數字的轉換,MySQL的停止在字符串的第一個非數字字符上並忽略其餘部分。如果字符串不是以數字開始,那麼它將被轉換爲數字0

可以避免這種行爲?

不要依賴MySQL來爲你輸入數據。既然您知道group_id是一個數字,請在客戶端應用程序中檢查用於生成查詢的值,並始終使其成爲數字或數字字符串。

相關問題