一個奇葩的問題,column not found
背景
配合業(yè)務排查一個問題狸相,業(yè)務反饋代理v3.1 升級代理y v3.3會報錯誤薛匪。開始以為代理或者后端mysql報錯。
DBA反饋mysql后端無報錯脓鹃,也排查了代理的日志逸尖。沒有發(fā)現(xiàn)查詢失敗日志。
絕地
而且拿業(yè)務SQL執(zhí)行瘸右,v3.1和v3.3都是可以正常執(zhí)行娇跟,都能出結果。懷疑是接入組件問題太颤,如果DAL有問題
V3.1應該也有問題苞俘,不會只有v3.3才有?
重生
當走投無路的時候龄章,又抽了一眼業(yè)務的報錯吃谣,發(fā)現(xiàn)column 'xxx' not found。順著這個思路google做裙,找到
有用的信息岗憋,或多遇到。
https://stackoverflow.com/questions/19062453/java-sq-sqlexception-column-not-found
關鍵信息:
It is failing because you're trying to extract category_id from the ResultSet and it isn't there.
在結果集中锚贱,找不到指定字段澜驮。
驗證
復盤了一下v3.1和v3.3的返回結果
v3.1
select count(distinct uid) from t where uid = 1;
| count(distinct uid) |
| 0 |
v3.3
select count(distinct uid) from t where uid = 1;
| count(distinct `uid`) |
| 0 |
根
v3.3中為了安全,給列名惋鸥,表名杂穷,庫名都加了反引號悍缠。而v3.1沒有改寫。問處在耐量,v3.1和v3.3的查詢重寫飞蚓,邏輯變了复唤。
一般人不會這么寫安皱,都會加別名的感局。不會出現(xiàn)這個問題庶喜。
處理
業(yè)務添加別名掐禁,解決問題也颤。