最近從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
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顯示型別
導致報錯
其實1、2、3、4、5、6、7、9、11、12項是可以加入開發規範和開發禁用列表的
ORALCE資料遷移
資料庫遷移方法 1 匯出 exp 1 使用者名稱 密碼 資料庫名 rows y indexes y compress n buffer 65536 feedback 100000 file f 生產環境資料庫備份 20141119 product.dmp log f 生產環境資料庫備份 201411...
MySQL資料遷移問題一
mysql的資料遷移比較簡單,但有幾點一定要注意 當啟用innodb引擎,在my.ini中有乙個配置項 innodb log file size 必須保證移植前後這個配置值是相同的,不然服務無法啟動 如果不知道這個值咋辦呢,檢視日誌 innodb error log file ib logfile0...
MySQL遷移(5 5 5 7)導致的問題
因為伺服器要過期了所以將資料庫裡的資料遷移到新的庫中,新庫的配置比老庫要高階好多,配置檔案沒有區別,唯一就是版本不同。在那天,就是那一天,把服務上線的時候,照例測試時,發現所有的查詢速度非常慢,慢的令人髮指,並且無法插入表情,所以排查導致的原因,並且解決問題。對相同的sql發現測試庫 還是5.5 和...