我有一個十分久遠的mysql數據庫腳本文件(.sql格式),現在我想將此數據庫導入oracle數據庫中,在網上搜集了一些解決辦法,其中利用Dbmover for mysql to oracle這個工具比較簡單,所以,就用了這個工具。
首先,將sql腳本中的數據庫結構與數據導入mysql數據庫中,利用source命令。可是,在導入的過程中,提示ERROR1366 錯誤。
在網上搜了一些內容,得到的結論是sql文件的編碼與數據庫的字符集編碼不一致導致的。下面就開始了修改編碼,使它們能夠統一。
先將sql腳本利用記事本工具另存為UTF-8編碼格式
然后,將sql數據庫中的字符集編碼統一為utf8
最后利用source導入,成功。
可是,在cmd中查看表中的一些漢字信息時,還是出現來了亂碼,但是在navicat中,卻可以正確顯示。
我思考我的數據本身是沒有問題的,是不是mysql某個部分的編碼需要修改,所以對character_set_client、character_set_server、character_set_connection、character_set_results通通都試了一遍,將其值改為gbk,然后在cmd中用select查找顯示。最終,在測試character_set_results時,在cmd中查看漢字可正常顯示,在navicat中亦可正常顯示,問題解決。
下面,運行Dbmover for mysql to oracle工具:
首先,輸入mysql服務器的用戶名和密碼:
接着進行mysql的連接設置:
然后,選擇oracle服務器的連接方式,選擇客戶端模式即可,因為服務器就安裝在本機,客戶端oraclelistener默認是運行的。
然后,配置oracle的登錄名、密碼、服務名(數據庫名)。
最后,選擇要轉換的表,進行轉換即可。
但是,在第一次嘗試時,出現了8個錯誤。
經過檢查,發現主要是ORA-00910錯誤,到網上搜了下,解釋如下:
Oracle Database Error ORA-00910
ORA-00910 specified length too long for its datatype
問題
for datatypes CHAR and RAW, the length specified was > 2000; otherwise, the length specified was > 4000.
解決
use a shorter length or switch to a datatype permitting a longer length such as a VARCHAR2, LONG CHAR, or LONG RAW
我就開始檢查,轉換后的類型,有沒有超出其在oracle下預定的范圍,發現了varchar(10000)類型。而,varchar(10000)類型的,范圍是:
Variable-length character string having maximum length size bytes or characters. Maximum size is 4000 bytes or characters, and minimum is 1 byte or 1 character. You must specify size for VARCHAR2.
來自:http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements001.htm#i45694
所以,在先將mysql中哪些越界的字段修改 alter table操作,
然后重新轉換,這一次轉換是成功的。