随着MySQL数据库的应用越来越广泛,DB2向MySQL数据库的迁移需求也越来越多。进行数据库之间迁移的时候,首先遇到的并且也是最基本最重要的就是两种数据库数据类型之间的转换。

相关阅读:

从商用到开源:15个维度,全面剖析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数据库工作中必不可少。为了方便比对,将两种数据库的数据类型总结如下图所示:

推荐阅读:

从商用到开源:DB2迁移至MySQL的最佳实践

15个维度,全面剖析DB2与MySQL数据库的差异

从Oracle到MySQL大家最关注的竟然是...

MySQL vs Postgre SQL的非技术维度的区别

MariaDB助力,MySQL流行度超越Oracle

资源下载

关注公众号:数据和云(OraNews)回复关键字获取

‘2017DTC’,2017DTC大会PPT

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

‘DBA04’,DBA手记4经典篇章电子书

‘INTERNALS’,Oracle RAC PPT

‘122ARCH’,Oracle 12.2体系结构图

‘2017OOW’,Oracle OpenWorld资料

‘PRELECTION’,大讲堂讲师课程资料

DB2 Vs MySQL系列 | MySQL与DB2的数据类型对比相关推荐

  1. DB2数据库认证系列教程——IBM DB2认证考前必备

    DB2数据库认证系列教程--IBM DB2认证考前必备 IBM DB2认证 IBM DB2 认证是求职的敲门砖,也是很多 DB2 爱好者热衷追求的目标.本专题收集整理了IBM DB 2数据库认证相关的 ...

  2. MySQL系列——MySQL实现序列(Sequence)效果

    MySQL实现序列效果 一般使用序列(Sequence)来处理主键字段,在MySQL中是没有序列的,但是MySQL有提供了自增长(increment)来实现类似的目的,但也只是自增,而不能设置步长.开 ...

  3. DB2 Vs MySQL系列 | 体系架构对比

    前些日子,我们做了DB2 VS MySQL的数据类型的对比,今天我们将体系架构的对比分享给大家,让大家对这两类数据库有更深刻的认识. 相关阅读: DB2迁移至MySQL的最佳实践 MySQL与DB2的 ...

  4. IT视频课程集(包含各类Oracle、DB2、Linux、Mysql、Nosql、Hadoop、BI、云计算、编程开发、网络、大数据、虚拟化

    马哥Linux培训视频课程:http://pan.baidu.com/s/1pJwk7dp Oracle.大数据系列课程:http://pan.baidu.com/s/1bnng3yZ 天善智能BI培 ...

  5. db2 springboot 整合_springboot的yml配置文件通过db2的方式整合mysql的教程

    springboot整合MySQL很简单,多数据源就master,slave就行了,但是在整合DB2就需要另起一行,以下是同一个yml文件 先配置MySQL,代码如下 spring: datasour ...

  6. db2 springboot 整合_springboot的yml配置文件通过db2的方式整合mysql代码示例

    本篇文章小编给大家分享一下springboot的yml配置文件通过db2的方式整合mysql代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. s ...

  7. sql语句大全(db2、oracle、mysql、sql server)

    -- left join 以左边的表为主,根据on关联条件,左边所有的数据都会显示出来,右边表中在左边没有匹配的数据会以Null来代替 -- right join 是以右边为主,根据on关联查询出数据 ...

  8. MySQL系列教程(一)

    摘要 MySQL的最初的核心思想,主要是开源.简便易用.其开发可追溯至1985年,而第一个内部发行版本诞生,已经是1995年.到1998年,MySQL已经可以支持10中操作系统了,其中就包括win平台 ...

  9. MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决

    MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 一.简介 MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发.发布并支持的.有以下特点: MySQL是 ...

最新文章

  1. 注册表故障恢复 必须使用记录或另一备份以恢复包含系统注册表数据的文件。恢复成功...
  2. WebDriver高级应用实例(7)
  3. 通过 SSH 端口转发实现异地内网服务器互通
  4. Iphone屏幕旋转
  5. 【产品干货】经典营销模型的产品化介绍
  6. 概率图模型-贝叶斯网络
  7. 中rsa非对称加密_HTTP的数据传输中,对称加密和非对称加密的区别是什么?
  8. 自从有了计算机和网络才有信息技术,2015年信息技术会考模拟选择题6(俞同明版)...
  9. 深信服桌面云取消聚合口后的影响
  10. Cura Engine 源码解析:Settings
  11. html div图片定位,css将div定位到图片上的固定位置
  12. 以计算机为主题的英语作文范例,英语作文范例,一篇万能英语作文范文。
  13. 打条码软件怎样测试到纸张大小,条码标签纸规格有哪些?如何在打印机上设置打印尺寸?...
  14. 金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出
  15. 如何用matlab画紫罗兰,[转载]基于MATLAB的快速傅立叶分析程序设计
  16. Windows12网页版开源HTML源码
  17. 【java基础】——一维数组和二维数组存储占用内存大小问题
  18. python中scrapy可以爬取多少数据_python scrapy框架爬取某站博人传评论数据
  19. 2021年全国职业院校技能大赛网络安全赛项C模块心得
  20. 科汛用mysql数据库_KesionCMS科讯CMS系统SQL标签使用方法详细介绍

热门文章

  1. 开源项目面试重要吗_年度最重要的开源新闻
  2. (13)Vue.js 自定义指令
  3. c# dataGridView与access数据库及其增删查改导出报表等
  4. CSS3 圆角 border-radius属性
  5. java https post get请求_JAVA利用HttpClient进行POST和GET请求(HTTPS)
  6. keil c语言绝对值函数,keil编写C程序是不是不能在函数内定义变量啊,求大神
  7. 简述计算机通信网络的技术指标,计算机网络基础知识之数据通信中的主要技术指标...
  8. move语句java_java自动化代码优化
  9. 常用docker管理UI
  10. EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public?