前幾天在寫sql的時候遇到一個問題,查出來的資料跟理想的完全不一致。這裡記錄一下
我要查詢type型別為0的資料,- 的資料也出來了。具體的資料庫的資訊如下。
首先想到的是,資料型別的問題,sql語句裡面寫的 type=0, 這裡是int 型別,再看一下資料庫欄位型別。
果然,type是varchar型別,與sql裡面的不一致。 mysql會對資料型別自動進行轉換,這也是為什麼sql寫的int型別,卻可以到資料的原因。但是為什麼 - 的資料也出來了呢?
是不是mysql在型別轉化的時候,將非數位字元轉換成了0呢?
果然,進行轉化的時候,非數位型別字串被轉換成了0,數位開頭的字串僅保留了數位。
還可以得到另外一個結論,mysql 在對資料進行隱式轉化的時候,是將表內資料進行轉換,而不是對查詢sql中的欄位進行轉換,可中轉換肯定耗費效能,也會導致索引失效!索引失效的問題
mysql 的容錯還體現在別的地方,比如
select 1/0 並不會報錯,
這種機制究竟是好是壞還需在具體場景中得出結論,總之,程式碼嚴謹一定是好的。