mysql資料庫和查詢語句中欄位型別不匹配出現異常,查詢或更新多條的原因
阿新 • • 發佈:2018-12-11
- 說明
- 表結構和where查詢的欄位型別一致,均為字串或者是整數,不會型別轉化
- 表結構和where查詢的欄位型別不一致:
- 一個為TIMESTAMP或者是DATETIME,另一個為常量,常量會轉化為TIMESTAMP,再進行比較
- 一個為DECIMAL或者是整數,整數會轉化為DECIMAL,再進行比較
- 一個為整數,另一個為字串,會都轉化為浮點型,再進行比較
注意:整數為準確值,浮點數為精度值,浮點型儲存結構是1個符號位,8個指數位,23個尾數,所以當位數超過7位的時候就會不精確,此時查詢會出現問題
- 問題
e_record和record_開頭的附件表,不排除其他表有這種情況,在查詢和更新資料時,因為資料庫儲存的id為varchar,如果查詢時不使用單引號或者雙引號,此時會處理多條
例項:
SELECT count(*) from record_49 where id = 4913000000000001461 會查詢出18條
4913000000000001461 轉化為浮點數:4.913000000000001E18
但是表中4913000000000000518、4913000000000000582等id轉化為浮點數都是:4.913000000000001E18
- 使用和表結構一樣的欄位型別,將id加上雙引號