oralce遷移Mysql問題總結


最近從oracle數據庫遷移到Mysql, 總結了一些不兼容和需要注意的地方,持久層用的Mybatis

1 guid盡量用代碼生成

現象:sys_guid()  mysql報錯,mysql對應的為UUID(),但是帶橫線,需要替換為  replace(uuid(),'-',''),所以最好用代碼生成, 這樣直接就通用了

2 最好不用nvl、ifnull等特性函數

現象:nvl為oracle特性函數,在mysql報錯,統一替換為case when then else end

3 子查詢請帶上別名

現象:子查詢不帶別名oracle可以通過,mysql語法錯誤

4 最好不用decode()函數

現象:同nvl,替換為case when then else end

5 刪除語句不要給表加別名

現象:mysql刪除語句不支持表別名(但是Oracle支持,所以為了通用刪除時不要使用別名)

6 刪除語句最好加上from關鍵字

現象:   mysql刪除必須是delete from  table,oracle可以是delete table為了通用要加上from

7 字段別名統一大寫

現象:mysql沒有自動轉換為大寫,oracle會自動轉換為大寫,為了代碼能統一取值,別名統一大寫

8 分頁查詢沒有找到兼容的寫法,找到簡單改寫方法

簡單修改的辦法:rownum替換為@num,不然就是重新寫一個mysql分頁

原oracle

 

 

 

mysql

 

 

 

9 批量插入不要用insert all,用兼容寫法

現象:insert all等語法mysql不支持,報錯

改為

 

 

10 日期無法兼容,有轉換方法

現象:之前的to_date寫法導致Mysql報錯

改為拆分兩份

 

 

11不用 || 連字符

現象:mysql不支持,統一改為concat(str,str2)函數

12 concat函數只能使用兩個參數

現象:不能使用concat(str,str2,str3),mysql支持,oracle不支持

13 wm_concat()行列轉換無法兼容,有轉換方法

方案:oracle wm_concat() 對應mysql group_concat()

14 從oracle遷移到mysql的數據,number類型被Mysql默認成了這個鬼樣子(不確定是不是遷移引起)

現象:mysql顯示類型

 

 

導致報錯

 

 

方案:修改字段小數點為0,如果確定不是遷移過程引起,則需要整理腳本統一修改

其實1、2、3、4、5、6、7、9、11、12項是可以加入開發規范和開發禁用列表的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM