1. 程式人生 > >DB2 Vs MySQL系列 | MySQL與DB2的資料型別對比

DB2 Vs MySQL系列 | MySQL與DB2的資料型別對比

0?wx_fmt=gif&wxfrom=5&wx_lazy=1

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

相關閱讀:

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

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

下圖是MySQL資料庫支援的內建資料型別:

640?wx_fmt=png&wxfrom=5&wx_lazy=1

MySQL5.7支援資料型別總覽

下圖是DB2資料庫支援的內建資料型別:

0?wx_fmt=png

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

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

數值欄位型別(Numeric)

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

0?wx_fmt=png

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

0?wx_fmt=png

實際測試對比發現,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還是MySQLCHAR(n)VARCHAR(n)型別分別表示定長和變長字元型別,括號中的n表示定義的能允許最大字元個數;這兩種資料型別在DB2MySQL中可以互換。

但是DB2CHAR(n)VARCHARn)的一些特殊用法比如CHAR(n) FOR BIT DATAVARCHAR(n)FOR BIT DATAMySQL中沒有得到很好實現,取而代之的是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資料庫中則沒有對CharVarchar型別做類似擴充套件,取而代之的是設計了BINARYVARBINARY資料型別專門儲存二進位制資料。

大資料欄位(LOB)型別

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

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

0?wx_fmt=png

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

自增欄位型別

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

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

0?wx_fmt=png

總結

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

0?wx_fmt=png

0?wx_fmt=jpeg

推薦閱讀:

資源下載

關注公眾號:資料和雲(OraNews)回覆關鍵字獲取

‘2017DTC’,2017DTC大會PPT

‘DBALIFE’,“DBA的一天”海報

‘DBA04’,DBA手記4經典篇章電子書

‘INTERNALS’,Oracle RAC PPT

‘122ARCH’,Oracle 12.2體系結構圖

‘2017OOW’,Oracle OpenWorld資料

‘PRELECTION’,大講堂講師課程資料

0?wx_fmt=png

相關推薦

MySQL中BIGINTJava資料型別對應問題

問題背景:        最近在做的工作使用了mybatis框架,前兩天有一個需求,中間涉及到一條sql,需要將某表中的最大最小主鍵取出來,mysql中該主鍵型別是BIGINT(20),我在xml檔案中是這樣寫的:<select id="getMinAndMaxId"

DB2 Vs MySQL系列 | MySQLDB2資料型別對比

隨著MySQL資料庫的應用越來越廣泛,DB2向MySQL資料庫的遷移需求也越來越多。進行資料庫之

MySQL學習筆記:基本資料型別查詢操作

#客戶端將資料儲存到資料庫伺服器上的過程     1、連線到伺服器 mysql -u xxx -p xxx     2、選擇一個庫 use xxx     3、建立表或者修改表    &

重灌系統後,mysql的安裝恢復資料

理論上的思路是:  1. 把你之前安裝的mysql資料備份      2.解除安裝掉原來的mysql  3.重新安裝mysql      4.在新安裝的mysql中建立和備份中對應的資料庫名    如圖:在被備份中每個資料庫的資料拷貝到對應的資料夾中在dos中測試安裝是否成功

MySQL全面瓦解3:資料型別介紹分析

概述 MySQL支援很多資料型別,以便我們能在複雜的業務場景中支援各種各樣的資料格式,儲存適當的資料內容。我們在設計資料庫時,正確的使用資料庫型別對整個資料庫的整潔和高效,會有很大的幫助。 目前常用的資料型別大致上可以分為4大類:整數型別、浮點數型別、字串(字元)型別、日期/時間型別。詳細如下 4大類

Mysql系列 —— MySQL的Charset和Collation

not null 分鐘 支持 fault mat 影響 但我 innodb 建表 本文轉載自:再見亂碼:5分鐘讀懂MySQL字符集設置 一.內容概述 在MySQL的使用過程中,了解字符集、字符序的概念,以及不同設置對數據存儲、比較的影響非常重要。不少同學在日常工作中遇到

MySQL——表的操作、資料型別

一、表的操作 1.建立一個表: create table table_name(                  &nb

MySQL學習(二)資料型別

擷取書中內容留作學習。。。。 1、整數型別 2、浮點數與定點數型別 3、日期時間型別   向資料庫中插入當前系統時間:CURRENT_TIME或者NOW() 4、文字字串型別   MySQL列舉型別:create table test(enm E

mysql的基本操作和資料型別

一.初始mysql語句 操作資料夾   增 create database db1 charset utf8   查 #檢視當前建立的資料庫 show create database db1; #檢視所有的資料庫 show databases;   改 alter

Day054--MySQL, 建立使用者和授權, 資料型別, 列舉和集合, 約束,唯一, 主鍵,外來鍵

建立使用者和授權 1.建立使用者: # 指定ip:192.118.1.1的mjj使用者登入 create user 'mjj'@'192.118.1.1' identified by '123'; # 指定ip:192.118.1.開頭的mjj使用者登入 create user 'mjj'@'192.118

MySql 查詢表中欄位的資料型別

【1】MySQL中查詢某表中欄位的資料型別 (1)DESC 表名; (2)DESCRIBE 表名; (3)SHOW COLUMNS FROM 表名; 應用示例: 1 DESC cfg_acct_free_res; 2 DESCRIBE cfg_acct_fre

MySQL 8.0 欄位資料型別不對導致查詢錯誤

背景: 在生產環境命名匯入了相同條數的記錄,但是開發人員查詢出來的資料行數不一樣。 分析: 後來經過比對和執行計劃分析是因為where條件後的表示時間欄位型別不一致導致的。 模擬分析: mysql> create table ta(id int not null au

mysql筆記14常見的資料型別

一、數值型 1、整型 tinyint、smallint、mediumint、int/integer、bigint 1         2       

MySQL資料庫(二)---資料型別資料表、約束

資料型別 資料型別是指列、儲存過程引數、表示式和區域性變數的資料特徵,它決定了資料的儲存格式,代表了不同的資訊型別。 整形 TINYINT SMALLINT MEDIUMINT INT BIGINT 浮點型 M是數字總位數 D是小數

Mysql資料庫InnodbMyISAM的效能對比測試

由於近期有個專案對系統性能要求很高,技術選型上由於種種原因已經確定使用Mysql資料庫,接下來就是要確定到底使用哪種儲存引擎。我們的應用是典型的寫多讀少,寫入內容為也很短,對系統的穩定性要求很高。所以儲存引擎肯定就定在廣泛使用的Innodb和MyISAM之中了。   

mysql:distinctgroup by 效率對比

在一個有10w條記錄的表中進行查詢, distict耗時:      0.078ms group by 耗時:0.031ms 給查詢的列新增索引之後: distict耗時:      0.00072550ms group by 耗時:0.00071650ms 所以不管咋滴,

MySQL中的常用基本資料型別

MySQL中常用的資料型別: varchar : 變長字串,使用時我們必須設定其長度,最大值”理論值”65535個,實際上最大隻能存65533個,但考慮到儲存的字元編碼的不同,也會有進一步的減少。比如: 如果儲存從中文gbk,則最多是65533/2個

MySQL基本概念--資料型別

1. mysql的資料型別       在mysql中有如下幾種資料型別:       (1)數值型       數值是諸如32 或153.4 這樣的值。mysql支援科學表示法,科學表示法由整數或浮點數後跟“e”或“e”、一個符號(“+”或“-”)和一個整數指數來表示。1.24e+12 和23.47e-1

JAVA的jdbc向MySql表中插入各種資料型別

pStmt=conn.prepareStatement("INSERT INTO RH_ENTRY"+ "(id,allow_comments,category_id,comment_count,content,create_on,name,status)"+ "values(?,?,?,?,?,?,?,?)

Java VS .NET:Java.NET的特點對比

AD web服務 產出 圖形化界面 編譯器 工作 root free batis 一、前言 為什麽要寫Java跟.NET對比? .NET出生之後就帶著Java的影子。從模仿到創新,.NET平臺也越來越成熟。他們不同的支持者也經常因為孰弱孰強的問題爭論不休。但是本文並不是