MySQL數字型別查詢的注意事項

2021-10-09 10:46:53 字數 1112 閱讀 4070

由於工作的疏忽,導致了乙個問題,問題具體不太好描述,語言表達能力有待提高鴨。。。

表裡的資料是這樣的:

表結構是這個鬼樣子的:

當我寫了一條這樣的sql(其實是因為我**寫錯導致的5555):

select

*from

`table

`where id in

('[1'

,'2'

,'3]'

)

一般來講,下意識會認為1和3都已經跪了,只能查出2來,對吧。因為,in 相當於是多次 = 嘛。

但是這個結果確實這樣的:

你會發現只有1不見了,3並沒有受到影響。

那如果這個sql是這樣:

select

*from

`table

`where id =

'3feso[2'

如此詭異的一句sql,居然還是查出3來了。

很納悶啊,=不是精確匹配麼,為啥後面有那麼多詭異的字元還能查出來?

如果換成 varchar型別的呢,再試試:

好像這次看起來才沒問題。

當欄位型別屬於字串型別時,where條件=才是精確匹配,當多出任意字元(空格除外)時,就會匹配不到。

當欄位型別屬於數字型別(例如:int,bigint,double…)時,where條件= 這個地方寫數字型別那麼就是精確匹配,如果是使用字串型別 『1』 去匹配時,那麼會從非數字字元開始往後全部忽略,如:『1[1』,這時查出來的就是id為1的記錄,後面的 [1 就會被忽略掉。

MySQL資料型別 UNSIGNED注意事項

1.unsigned unsigned屬性就是將數字型別無符號化,與c c 這些程式語言中的unsigned含義相同。例如,int的型別範圍是 2 147 483 648 2 147 483 647,int unsigned的範圍型別就是0 4 294 967 295。在mysql中整型範圍 型別 ...

mysql分割槽注意 MySQL表分割槽注意事項

1 分割槽列索引約束 若表有primary key或unique key,則分割槽表的分割槽列必須包含在primary key或unique key列表裡,這是為了確保主鍵的效率,否則同一主鍵區的東西乙個在 分割槽,乙個在 分割槽,顯然會比較麻煩。2 各分割槽型別條件 range 每個分割槽包含那些...

mysql中replace into注意事項

1 mysql replace into 是insert into 的增強版本,它主要用於以下場景 那麼 mysql 中如何實現這樣的邏輯呢?別著急 mysql中有更簡單的方法 replace into replace into t id,update time values 1,now 或 rep...