mysql版本升級引發的問題 問題描述: 1. ibatis 中 mysql語句 Java代碼 <select id="getQids" parameterClass="int" resultClass="hashMap"> SELECT d.qid,GROUP_CONCAT(epq.qid) qids FROM table1 d,table2 epq WHERE d.qid=#qid# AND d.pid=epq.pid GROUP BY d.checkPid LIMIT 1 </select> 2. service層代碼 Java代碼 Map<String,Object> tempMap = dao.getQids(qid); if(tempMap != null){ byte[] arr = (byte[])tempMap.get("qids"); String tempQids = new String(arr); tempMap.put("qids", tempQids); this.qids.add(tempMap); } 3. 在測試服務器上測試時,發現一直報2中刷紅部分一直報 類型轉換錯誤 4. 采用了N種辦法 (1) 本地與svn代碼 (2) 對比 測試 與 正式的代碼 (3) 對比測試與正式數據的差異性 實在找不到原因 (4) 開始懷疑 mysql驅動 (5) mysql數據庫版本 最終竟然 鎖定在mysql數據庫版本 由於數據庫(測試庫) 上個月剛采用了 mysql 5.5 ,而正式上還沒有發布,仍舊采用的mysql 5.1,真正原因。 如下原因: 當你用group_concat的時候請注意,連接起來的字段如果是int型,一定要轉換成char再拼起來, 否則在你執行後(ExecuteScalar或者其它任何執行SQL返回結果的方法)返回的將不是一個逗號隔開的串, 而是byte[]。 該問題當你在SQLyog等一些工具中是體現不出來的,所以很難發現。 select group_concat(ipaddress) from t_ip 返回逗號隔開的串 select group_concat(id) from t_ip 返回byte[] select group_concat(CAST(id as char)) from t_dep 返回逗號隔開的串 select group_concat(Convert(id , char)) from t_dep 返回逗號隔開的串