随着MySQL数据库的应用越来越广泛,DB2向MySQL数据库的迁移需求也越来越多。进行数据库之间迁移的时候,首先遇到的并且也是最基本最重要的就是两种数据库数据类型之间的转换。
  
  相关阅读:
  
  从商用到开源:15个维度,全面剖析DB2与MySQL数据库的差异
  
  从商用到开源:DB2迁移至MySQL的最佳实践
  
  下面结合中国证券等级结算深圳分公司开源数据库研究测试项目的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还是MySQL,CHAR(n)和VARCHAR(n)类型分别表示定长和变长字符类型,括号中的n表示定义的能允许最大字符个数;这两种数据类型在DB2和MySQL中可以互换。
  
  但是DB2中CHAR(n)和VARCHAR(n)的一些特殊用法比如CHAR(n)www.dasheng178.com 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中对大数据字段的定义则更加精细,分别为不同长度的大数据字段设计了不同层次的字段类型。
  
  0?wx_fmt=png
  
  如上图所示,DB2中CLOB(n)和BLOB(n)两种大数据字段类型因其定义的大小不同而分别对应了MySQL数据库中的八种数据类型。
  
  自增字段类型
  
  DB2允许在Create table时能且只能为表中的一个字段指定为Identity自增字段,分别有Generatedalways和Generated bydefault两种形式,表示定义的自增字段不允许人工(应用)干预或者允许人工干预。
  
  MySQL数据库中的自增字段只需要AUTO_INCREMENT修饰即可,而且该字段是人工可干预的。
  
  0?wx_www.233077.cn fmt=png

从商用到开源:15个维度,全面剖析DB2与MySQL数据库的差异的更多相关文章

  1. 基于Dapper的开源Lambda扩展LnskyDB 3.0已支持Mysql数据库

    LnskyDB LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼.,现在已经支持MySql和Sql serv ...

  2. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  3. .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB

    今天给大家介绍一个不错的小巧轻量级的NoSQL文件数据库LiteDB.本博客在2013年也介绍过2款.NET平台的开源数据库: 1.[原创]开源.NET下的XML数据库介绍及入门 2.[原创]C#开源 ...

  4. mysql数据库优化课程---15、mysql优化步骤

    mysql数据库优化课程---15.mysql优化步骤 一.总结 一句话总结:索引优化最立竿见影 1.mysql中最常用最立竿见影的优化是什么? 索引优化 索引优化,不然有多少行要扫描多少次,1亿行大 ...

  5. Ubuntu 15.04 Qt5 链接 mysql数据库

    序 最近在Ubuntu15.04下做一个Linux-服务器-客户端通信项目,用到MySQL数据库.开始的时候,在数据库链接时遇到障碍,查找资料解决. 特此记录,分享于此. 环境配置 系统:Ubuntu ...

  6. php面试专题---15、MySQL数据库基础考察点

    php面试专题---15.MySQL数据库基础考察点 一.总结 一句话总结: 注意:只写精品 1.mysql定义int(3),那么我存1234就错了么? 不是:无影响:只会影响显示字符的个数:可以为整 ...

  7. 在windows上安装MySQL数据库注意点及Navicat Premium 15的破解

    在windows上安装MySQL数据库  跟随慕课网教程(http://www.imooc.com/wiki/mysqllesson/mysqlwindows.html)下载安装MySQL: 其中注意 ...

  8. 学会这15点,让你分分钟拿下Redis数据库

    1.Redis简介 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统.Redis是一个开源的使用ANSI ...

  9. 【开源】分享2011-2015年全国城市历史天气数据库【Sqlite+C#访问程序】

    由于个人研究需要,需要采集天气历史数据,前一篇文章:C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子),介绍了基本的采集思路和核心代码,经过1个星期的采集,历史数据库 ...

随机推荐

  1. 【转】新装的CentOS 7安装python3

    https://blog.csdn.net/lovefengruoqing/article/details/79284573 centos7 自带有 python,但是却是 python2 版本的 p ...

  2. 从零开始的Python学习Episode 18——面向对象(1)

    类与对象 类即类别.种类,是面向对象设计最重要的概念,对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体. 类的定义 class 类名: 属性1 属性2 def 方法(self,ar ...

  3. 关于go语言中的WaitGroup

    如果你刚接触Go语言并且想用它构建高并发,高性能的应用,弄明白WaitGroups是怎么回事很重要. 在本教程中,我们将掌握以下内容: WaitGroups的用途 一个WaitGroups的简单示例 ...

  4. yarn资源memory与core计算配置

    yarn调度分配主要是针对Memory与CPU进行管理分配,并将其组合抽象成container来管理计算使用 memory配置 计算每台机子最多可以拥有多少个container:  container ...

  5. 2-Tenth Scrum Meeting20151210

    任务分配 闫昊: 今日完成:请假.(编译) 明日任务:参加会议讨论,安排任务分工. 唐彬: 今日完成:请假.(编译) 明日任务:参加会议讨论,安排任务分工. 史烨轩: 今日完成:请假.(编译) 明日任 ...

  6. 《Spring1之 第一次站立会议(重发)》

    < 第一次站立会议(重发)> 昨天,我对我们团队要做的项目进行了相关资料的查找,我找到了服务器和客户端的相关代码以及找到了把它们通信所使用TCP/IP等协议: 今天,我把找到的代码和协议资 ...

  7. gogoing软件NABCD

    N,need 需求:gogoing项目目前打算做得是一个基于石家庄铁道大学在校大学生对于短期节假日出行旅游的指南.最关键的定义为“穷游”.“穷”则体现在以小的花销去实现最完美的旅游方式.我们的gogo ...

  8. caffe with anaconda

    https://blog.csdn.net/u013498583/article/details/74231058 https://www.cnblogs.com/youxin/p/4073703.h ...

  9. POJ 2441 Arrange the Bulls 状压dp

    题目链接: http://poj.org/problem?id=2441 Arrange the Bulls Time Limit: 4000MSMemory Limit: 65536K 问题描述 F ...

  10. HDU 1565 方格取数(1) 轮廓线dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others) ...