您的位置:首頁>正文

DB2和MySQL系列|MySQL與DB2的資料類型對比

隨著MySQL資料庫的應用越來越廣泛, DB2向MySQL資料庫的遷移需求也越來越多。 進行資料庫之間遷移的時候, 首先遇到的並且也是最基本最重要的就是兩種資料庫資料類型之間的轉換。

下面結合中國證券等級結算深圳分公司開來源資料庫研究測試專案的DB2資料庫向MySQL資料庫遷移專案, 說明兩種資料庫資料類型的差異以及遷移過程中的一些注意事項。

無論是DB2資料庫, 還是MySQL資料庫, 都要在創建資料庫表時為其中的每一列定義一個資料類型, 用於限定該列取值範圍。 DB2資料庫支援內置的資料類型(built-in)和用戶自訂的資料類型(UDT),但是MySQL資料庫只支援內置的資料類型。

下圖是MySQL資料庫支援的內置資料類型:

MySQL5.7支援資料類型總覽

下圖是DB2資料庫支援的內置資料類型:

DB2 V9/V10支援資料類型總覽

DB2資料類型轉換為MySQL資料類型, 原則上可以分為三大類, 在實際轉換過程建議遵從以下轉換規則進行轉換:

數值欄位類型(Numeric)

DB2資料庫和MySQL資料庫的數數值型別都可以分為整型數值和浮點型數值。 其中在整型數值方面, MySQL資料庫的整型類型有有符號(singed)和無符號(unsigned)兩種, 因此每一類型都可以有兩種精度範圍的取值;DB2資料庫則都是有符號的取值,

只存在一種精度範圍。 下圖是兩種資料庫的整型類型對照表:

浮點型數值轉換方面, 基本上DB2中有的基底資料型別, 在MySQL中能找到對應的同名資料類型。

實際測試對比發現, DB2的數數值型別和MySQL中對應的數數值型別基本同名同義, 可以很輕鬆地實現轉換。

日期時間欄位類型(Date &Time)

MySQL支援的日期時間類型(Datetime/Date/Timestamp/Time/Year)比DB2支援的(Date/Timestamp/Time)更豐富。

兩種資料庫在日期時間類型上存在如下異同:

Date類型

DB2和MySQL中的Date類型都占四個位元組(其中前兩個位元組為Year,第三個位元組為Month,第四個位元組為Day);主要差別是DB2資料庫中Year的範圍是0001~9999, MySQL中Year的範圍則為1000~9999。 實際運用中可以直接轉換。

Timestamp類型

MySQL中的Timestamp是一個Date/time的組合體, 取值範圍是從1970-01-01 00:00:00到2037年。 轉換中可以直接從DB2中的Timestamp轉換而來。

Time類型

MySQL中Time類型取值範圍為從“-838:59:59”to “838:59:59”(HHH:MM:SS),

小時部分非常大的原因是MySQL中Time類型不僅可以代表一天中的時間(小於24小時), 而且可以代表某個資料庫事件消耗的時間或者兩個事件之間的時間間隔(可能大於24小時, 甚至為負值)。

DB2中該Time類型指一天中的時間, 因此取值範圍只能是從“00:00:00”到“23:59:59”。

其他

MySQL中除了上述三種日期時間類型外, 還有Datetime和Year兩種特有的時間類型。 Datetime類型也是date和time類型的組合體(YYYY-MM-DDHH:MM:SS), 其中Year取值範圍從1000到9999。

Year類型取值範圍從1901到2155, 實際運用中完全可以用SMALLINT或CHAR(4)取代。

字串欄位類型(String)

字元型(CHAR/VARCHAR)類型

無論是DB2還是MySQL, CHAR(n)和VARCHAR(n)類型分別表示定長和變長字元類型,括弧中的n表示定義的能允許最大字元個數;這兩種資料類型在DB2和MySQL中可以互換。

但是DB2中CHAR(n)和VARCHAR(n)的一些特殊用法比如CHAR(n) FOR BIT DATA, VARCHAR(n)FOR BIT DATA在MySQL中沒有得到很好實現,

取而代之的是MySQL設計了新的資料類型來實現DB2中的類似功能。 MySQL中分別使用BINARY(n)和VARBINARY(n)替代CHAR(n)FOR BIT DATA 和VARCHAR(n) FOR BIT DATA。

DB2資料庫中使用For Bit Data從句修飾Char(n)和Varchar(n)限制指定的欄位類型存儲二進位資料, 一般用於存儲音訊資料等場合。 而在MySQL資料庫中則沒有對Char和Varchar類型做類似擴展, 取而代之的是設計了BINARY和VARBINARY資料類型專門存儲二進位資料。

大資料欄位(LOB)類型

DB2資料庫中VARCHAR類型欄位最大能存儲的位元組數不超過表定義的頁大小, 比如某個表的頁大小(pagesize)為32KB, 那麼定義的VARCHAR最大有32,672個位元組長;如果要存儲的位元組長超過表的頁大小, 那麼需要為欄位定義大資料類型存儲資料。

DB2的大資料類型有CLOB和BLOB兩種, 分別存儲字元或者二進位資料。 而在MySQL中對大資料欄位的定義則更加精細, 分別為不同長度的大資料欄位設計了不同層次的欄位類型。

如上圖所示,DB2中CLOB(n)和BLOB(n)兩種大資料欄位類型因其定義的大小不同而分別對應了MySQL資料庫中的八種資料類型。

自增欄位類型

DB2允許在Create table時能且只能為表中的一個欄位指定為Identity自增欄位,分別有Generatedalways和Generated bydefault兩種形式,表示定義的自增欄位不允許人工(應用)干預或者允許人工干預。

MySQL資料庫中的自增欄位只需要AUTO_INCREMENT修飾即可,而且該欄位是人工可干預的。

總結

前述主要對比了DB2資料庫和MySQL資料庫在基底資料型別上的一些差異,對這些差異的掌握瞭解在做DB2資料庫遷移到MySQL資料庫工作中必不可少。為了方便比對,將兩種資料庫的資料類型總結如下圖所示:

End.

運行人員:中國統計網小編

中國統計網,是國內最早的大資料學習網站

//www.itongji.cn

分別為不同長度的大資料欄位設計了不同層次的欄位類型。

如上圖所示,DB2中CLOB(n)和BLOB(n)兩種大資料欄位類型因其定義的大小不同而分別對應了MySQL資料庫中的八種資料類型。

自增欄位類型

DB2允許在Create table時能且只能為表中的一個欄位指定為Identity自增欄位,分別有Generatedalways和Generated bydefault兩種形式,表示定義的自增欄位不允許人工(應用)干預或者允許人工干預。

MySQL資料庫中的自增欄位只需要AUTO_INCREMENT修飾即可,而且該欄位是人工可干預的。

總結

前述主要對比了DB2資料庫和MySQL資料庫在基底資料型別上的一些差異,對這些差異的掌握瞭解在做DB2資料庫遷移到MySQL資料庫工作中必不可少。為了方便比對,將兩種資料庫的資料類型總結如下圖所示:

End.

運行人員:中國統計網小編

中國統計網,是國內最早的大資料學習網站

//www.itongji.cn

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示