专栏首页数据和云DB2 Vs MySQL系列 | MySQL与DB2的数据类型对比

DB2 Vs 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数据库工作中必不可少。为了方便比对,将两种数据库的数据类型总结如下图所示:

本文分享自微信公众号 - 数据和云(OraNews),作者:enmotech

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-01-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一个小时学会MySQL数据库

    导读:本文详细介绍了MySQL数据库,主要从MySQL数据库的概要、MySQL介绍、如何快速安装运行MySQL数据库、使用GUI操作MySQL、如何使用SQL访...

    数据和云
  • DB2 Vs MySQL系列 | 体系架构对比

    前些日子,我们做了DB2 VS MySQL的数据类型的对比,今天我们将体系架构的对比分享给大家,让大家对这两类数据库有更深刻的认识。 ? DB2体系结构 ? ?...

    数据和云
  • 数据库流行度5月排行榜:Oracle企稳PostgreSQL飙升

    五一假期,宣告2018年的1/3已然飘过,在匆匆流逝的时光里,有些变化潜移默化,有些变化轰轰烈烈,然而有紧迫感的人,必然计日以待、计日以行。

    数据和云
  • 2019 MySQL8 24小时快速入门(2)

    接下来就可以进入实战了。工欲善其事必先利其器,首先我们要做的事情,就是找个好用的界面工具。我想你大概不想一直与这样黑漆漆的界面为伴吧:

    Lenis
  • 数据中心使用dtu远程连接oracel 9i数据库问题

    数据中心使用dtu远程连接oracel 9i数据库问题 发表人:lurrance | 发表时间: 2005年二月20日, 12:13 经过从网上找来的资料以及看...

    阿新
  • 数据库常见的图形工具有哪些?

    疑惑一 MySQL常用的图形化管理工具有哪些? 现在随着PHP+MySql越来越火,周边相关产品也受到众多人的关注。在PC上修改数据库,查看数据库内容是研发人员...

    程序员互动联盟
  • MySQL 5.x界面安装 - Windows

    MySQL是一个典型的关系数据库,目前是Oracle公司产品之一,也是目前主流使用的关系型数据库之一。使用MySQL可以进行最基本的数据存储、管理、查询等操作,...

    聚沙成塔
  • redis主从|哨兵|集群模式

    可以用info replication查看主从情况  例子:  1主2从  1哨兵,可以用命令起也可以用配置文件里  可以使用双哨兵,更安全,  redis-...

    yaphetsfang
  • 中国人民大学教授杜小勇:One Size Does not Fit All?

    2019数据技术嘉年华于11月16日在京落下了帷幕。大会历时两天,来自全国各地上千名学术精英、数据库领袖人物、数据库专家、技术爱好者在这里汇聚一堂,围绕“开源 ...

    数据和云
  • MySQL命令行导出导入数据库和数据表

    如我输入的命令行:cd C:\Program Files\MySQL\MySQL Server 5.7\bin

    拓荒者

扫码关注云+社区

领取腾讯云代金券