前幾天因工做須要我得將Oracle數據庫中幾十張錶轉移到Mysql中,因爲以前沒有相關經驗,上網簡單百度後選用Navcat Premium軟件工做。
正則表達式
Navcat Premium進行數據轉移有三種辦法:一、複製表 二、導出、導入數據 三、導出成sql腳本,執行。sql
一開始使用複製表的方法,打開菜單欄「工具」的數據傳輸功能,左邊選擇要複製的表,右邊選擇鏈接而後選中目標數據庫,接下在就是next by next的一鍵式操做。這個方法真的很方便,可是bug也不少,最大的bug是數值類型不匹配。Oracle中數值類型是Number2,複製到Mysql中默認爲double型,而我須要的是int型。使用這方法失敗。數據庫
接着嘗試將Oracle表中數據導出爲文件再導入Mysql,因爲導入導出操做有些複雜,且沒法批量操做,須要在Mysql中先建立表,而後逐一導入數據,因此放棄。
編輯器
最後嘗試將數據以及表結構轉儲爲sql腳本文件,在Mysql中執行。打開菜單欄「工具」的數據傳輸功能,左邊選擇要複製的表,右邊選擇文件。Mysql中執行sql文件時遇到問題,Oracle轉儲生成的sql腳本文件中數值類型是decimal(xx,xx),日期類型是datetime(x),而Mysql中沒有decimal數值類型,日期類型只支持datetime並沒有顯式的大小限定,因而決定用sublime編輯器修改。使用sublime查找功能find all找出全部datetime(xx,xx),統一改成int,執行後發現有錯誤。原來有的字段類型是decimal(xx,xx)而有的字段類型是decimal(x,x),deciaml(xx,x)……,統一修改時會誤刪其它字符。因而想到正則表達式匹配,恰好sublime支持正則查找,使用正則查找功能匹配全部decimal(xx,xx),decimal(xx,x),decimal(x,xx)……統一改成int類型,而後用一樣的方法修改datetime類型,再執行sql腳本,這下終於成功執行,數據也都是正確的,大功告成!工具
最後說說這個方法的侷限:若是有這樣一個需求,Mysql中部分字段數值類型須要是double、部分須要是int,這該如何是好?暫時能想到的是先在Mysql中建立表,再逐一導入數據。
ci