達夢資料庫遷移(三)
阿新 • • 發佈:2021-08-14
前言
前面兩篇文章,介紹了一些遷移前的準備工作,實現了資料的匯入,但是當我將資料匯入到DM後,啟動了自己的專案,接下來一堆報錯接踵而至,總結了一些常見的報錯,在這裡做個記錄。
報錯記錄
關鍵字
達夢資料庫的關鍵字是雙引號(""),而mysql的關鍵字是反引號(``),所以一些sql的欄位加了關鍵字的,只能做下替換。
這次替換其實後來發現替換的地方還挺多的,究其原因,還是在設計MYSQL表字段的時候,起名字不規範引起的,用了一些關鍵字做了欄位名,如key、code等欄位名。
真是偷懶一時爽,改起來火葬場
mybatis大小寫轉換
mybatis在我們開啟瞭如下配置
mapUnderscoreToCamelCase:true
後,在mabatis的mapper檔案寫了如下sql後:
<select id="queryDeviceByPage" resultType="map" parameterType="map">
select
t1.id as id,
t1.work_id as workId,
t1.work_ip as workIp,
t1.work_moudle workMoudle
from
xxx t1
</select>
發現並沒有在前端轉成駝峰命名,而是變成了一堆小寫,究其原因,還是達夢資料庫的Driver和mysql的Driver實現有點差別,感興趣可以去研究原始碼,將sql改為如下內容即可:
select
t1.id as id,
t1.work_id as work_id,
t1.work_ip as work_ip,
t1.work_moudle work_moudle
from
xxx t1
建議mapper檔案使用resultMap實體對映
函式替換
mysql當中有些函式達夢是不適用的,需要做些適配
- group_concat() 替換成 wm_concat()
- 去除STR_TO_DATE()
- 不支援 from_unixtime 函式,使用 round 代替
個人覺得,資料庫是提供了一些比較方便的函式,但是如果專案為了相容性更強,或者強依賴索引,還是在業務層處理比較好。
mybatisplus查詢有達夢的關鍵字
實體類新增如下:
@TableField("\"logic\"")
private String logic;
varchar和text
text欄位無法distinct,group by,order by,建議改為varchar
結語
將上面的問題修改完成後,系統確實可以運行了起來,接下來要思考的就是,如何可以一套程式碼相容兩個資料庫。