1. 程式人生 > 其它 >達夢資料庫遷移(三)

達夢資料庫遷移(三)

前言

前面兩篇文章,介紹了一些遷移前的準備工作,實現了資料的匯入,但是當我將資料匯入到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

結語

將上面的問題修改完成後,系統確實可以運行了起來,接下來要思考的就是,如何可以一套程式碼相容兩個資料庫。