前幾天在寫sql的時候遇到一個問題,查出來的資料跟理想的完全不一致,這里記錄一下

我要查詢type型別為0的資料,- 的資料也出來了,具體的資料庫的資訊如下,

首先想到的是,資料型別的問題,sql陳述句里面寫的 type=0, 這里是int 型別,再看一下資料庫欄位型別,

果然,type是varchar型別,與sql里面的不一致, mysql會對資料型別自動進行轉換,這也是為什么sql寫的int型別,卻可以到資料的原因,但是為什么 - 的資料也出來了呢?
是不是mysql在型別轉化的時候,將非數字字符轉換成了0呢?

果然,進行轉化的時候,非數字型別字串被轉換成了0,數字開頭的字串僅保留了數字,
還可以得到另外一個結論,mysql 在對資料進行隱式轉化的時候,是將表內資料進行轉換,而不是對查詢sql中的欄位進行轉換,可中轉換肯定耗費性能,也會導致索引失效!索引失效的問題
mysql 的容錯還體現在別的地方,比如
select 1/0 并不會報錯,

這種機制究竟是好是壞還需在具體場景中得出結論,總之,代碼嚴謹一定是好的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/157506.html
標籤:其他
下一篇:使用PowerDesigner搭建學生選課管理系統(學生老師管理員一體系結構)由基礎設計至資料庫生成(SQL陳述句源代碼的生成)全程序實體操作
