最近從oracle數據庫遷移到Mysql, 總結了一些不兼容和須要注意的地方,持久層用的Mybatismysql
1 guid儘可能用代碼生成sql
現象:sys_guid() mysql報錯,mysql對應的爲UUID(),可是帶橫線,須要替換爲 replace(uuid(),'-',''),因此最好用代碼生成, 這樣直接就通用了數據庫
2 最好不用nvl、ifnull等特性函數oracle
現象:nvl爲oracle特性函數,在mysql報錯,統一替換爲case when then else end函數
3 子查詢請帶上別名ui
現象:子查詢不帶別名oracle能夠經過,mysql語法錯誤spa
4 最好不用decode()函數3d
現象:同nvl,替換爲case when then else endcode
5 刪除語句不要給表加別名blog
現象: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,若是肯定不是遷移過程引發,則須要整理腳本統一修改
其實一、二、三、四、五、六、七、九、十一、12項是能夠加入開發規範和開發禁用列表的