由於工作的疏忽,導致了乙個問題,問題具體不太好描述,語言表達能力有待提高鴨。。。
表裡的資料是這樣的:
表結構是這個鬼樣子的:
當我寫了一條這樣的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...