剛來公司實習,遇到的第一個任務就是這個,簡單記錄一下思路過程。人菜的很,沒啥參考價值。 測試時: 將現有的oracle庫轉為mysql: 用的Navicat自帶數據傳輸功能,簡單粗暴 出現的問題: 1.原本在oracle中 NUMBER類型的欄位轉為了decimal。 (1)Oracle使用序列(S ...
剛來公司實習,遇到的第一個任務就是這個,簡單記錄一下思路過程。人菜的很,沒啥參考價值。
測試時:
將現有的oracle庫轉為mysql: 用的Navicat自帶數據傳輸功能,簡單粗暴
出現的問題:
1.原本在oracle中 NUMBER類型的欄位轉為了decimal。
(1)Oracle使用序列(SEQUENCE)實現的主鍵遞增,原本表主鍵是沒有AUTO_INCREMENT。
(2)有些decimal類型的欄位是主鍵。
(3)Decimal不能設置AUTO_INCREMENT。
解決方法:
百度了一哈,解決方法分兩種:
1:不去管它,在mysql中用函數模擬序列實現主鍵遞增,在mapper中的序列稍作修改就可以了。
2:將decimal手動改為支持AUTO_INCREMENT的類型,刪除mapper中的序列。
因為筆者很菜,所有我這裡選用了第二種辦法,將表中所有decimal欄位改為bigint類 型(還挺麻煩的)。
因為目前用到的庫只有字元串和數字兩種類型,所以資料庫目前只做了以上修改。
修改mapper:
主要註意以下幾點:
1 分頁查詢:用的插件,改改配置就行了。有些查詢直接寫在sql中,需手動改。
ROWNUM < '5' 改為 limit 5 ,同理取結果集的第一條時,使用limit 1。
2 空字元串問題:Oracle中空字元串''就是null(也就是說,只有null,沒有空字元),而MySQL是區分null和''的。所以改為
類似這樣子。
3 自增主鍵:直接刪去序列。
4 將mapper中的數據類型做對應。
百度一下 Mybatis JdbcType與Oracle、MySql數據類型對應列表。
我這裡具體操作為將所有NUMERIC改為BIGINT,
jdbcType="CLOB" 改為varchar。
5 在本來的oracle中有user表,因為與關鍵字衝突的原因,在mapper中寫為”USER”,mysql中需要將雙引號去掉。
6 mysql的substr不能加雙引號,而且是從1開始(oracle是從0開始)。
2018.12.21
項目還未結束,還會更新。。
註:在實際操作中會遇到很多問題,多將代碼複製到可視化工具里運行一下看看。