随着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) 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_fmt=png
  
  总结
  
  前述主要对比了DB2数据库和MySQL数据库在基本数据类型上的一些差异,对这些差异的掌握了解在做DB2数据库迁移到MySQL数据库工作中必不可少。为了方便比对,将两种数据库的数据类型总结如下图所示:
  
  0?wx_fmt=png
  
  0?wx_fmt=jpeg
  
  推荐阅读:
  
  从商用到开源:DB2迁移至MySQL的最佳实践
  
  15个维度,全面剖析DB2与MySQL数据库的差异
  
  从Oracle到MySQL大家最关注的竟然是...
  
  MySQL vs Postgre SQL的非技术维度的区别
  
  MariaDB助力,MySQL流行度超越Oracle
  
  资源下载
  
  关注公众号:数据和云(www.hsl85.cn OraNews)回复关键字获取
  
  ‘2017DTC’,2017DTC大会PPT
  
  ‘DBALIFE’,“DBA的一天”海报
  
  ‘DBA04’,www.wancyuLe.com DBA手记4经典篇章电子书
  
  ‘INTERNALS’www.thd729.com ,Oracle RAC PPT
  
  ‘122ARCH’,Oracle 12.2体系结构图
  
  ‘2017OOW’,Oracle OpenWorld资料
  
  ‘PRELECTION’,大讲堂讲师课程资料

DB2 Vs MySQL系列 | MySQL与DB2的数据类型对比的更多相关文章

  1. MYSQL系列-Mysql存储引擎选择

    MYSQL系列-Mysql存储引擎选择 //查看当前数据库支持的存储引擎 show engines \G; 创建表的时候可以通过engine=MyISAM指定存储引擎 MyISAM: .MYISAM不 ...

  2. MYSQL系列-MYSQL基础增强(Myql函数)

    MYSQL基础增强(Myql函数) 在这里只介绍一些常用的,比较新颖的: 字符串函数: CONCAT://字符串连接函数 mysql> SELECT CONCAT('My', 'S', 'QL' ...

  3. mysql与oracle常用函数及数据类型对比

    最近在转一个原来使用oracle,打算改为mysql的系统,有些常用的oracle函数的mysql实现顺便整理了下,主要是系统中涉及到的(其实原来是专门整理过一个详细doc的,只是每次找word麻烦) ...

  4. mysql与oracle常用函数及数据类型对比00持续补充

    最近在转一个原来使用oracle,改为mysql的系统,有些常用的oracle函数的mysql实现顺便整理了下,主要是系统中涉及到的(其实原来是专门整理过一个详细doc的,只是每次找word麻烦). ...

  5. [转载]DB2与ORACLE、MYSQL比较2

    原文地址:DB2与ORACLE.MYSQL比较2作者:欣颖 4.2 Oracle9i  Oracle的产品战略是每12到18个月发布一个主要版本.主要发行版本所遵循的命名战略在PC领域中更为常见,它不 ...

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

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

  7. Oracle、Db2、SqlServer、MySQL 数据库插入当前系统时间

    做易买网项目,由于对数据库插入系统时间不了解,常常遇到的问题: 1.java.sql.SQLException: ORA-01861: 文字与格式字符串不匹配.原因:由于获取系统时间类型不对,应为sy ...

  8. Mysql系列九:使用zookeeper管理远程Mycat配置文件、Mycat监控、Mycat数据迁移(扩容)

    一.使用zookeeper管理远程Mycat配置文件 环境准备: 虚拟机192.168.152.130: zookeeper,具体参考前面文章 搭建dubbo+zookeeper+dubboadmin ...

  9. Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案

    一.前言 在前面的文章Mysql系列四:数据库分库分表基础理论中,已经说过分库分表需要应对的技术难题有如下几个: 1. 分布式全局唯一id 2. 分片规则和策略 3. 跨分片技术问题 4. 跨分片事物 ...

随机推荐

  1. Java编辑PPT的柱状图,与内嵌的Excel联动

    /** * 条形图:柱形图 的数据写入方法 * @param slide 图表 * @param index 柱状图的下标 * @param data 要填充的数据 * @param titles 内 ...

  2. ThreeJS实现波纹粒子效果

    今天我们来用ThreeJS的库实现一个波纹粒子效果,我们用到的ThreeJS的库有CanvasRenderer.js,OrbitControls.js,Projector.js,stats.min.j ...

  3. c语言数字图像处理(五):空间滤波

    空间滤波原理 使用大小为m*n的滤波器对大小为M*N的图像进行线性空间滤波,将滤波器模板乘以图像中对应灰度值,相加得模板中心灰度值 a = (m-1)/2, b = (n-1)/2 若f(x+s, y ...

  4. SAO Utils – SAO风格启动菜单

    SAO Utils 是一款拥有 SAO(刀剑神域)外观风格的启动器,搭载各种各样强大的小工具. 随时随地.在屏幕任何地方 按住鼠标左键和右键并向下拖动 即可呼出应用启动菜单(触控设备直接支持双指下滑手 ...

  5. Beta阶段基于NABCD评论作品

    组名:杨老师粉丝群 组长:乔静玉 组员:吴奕瑶  刘佳瑞  公冶令鑫  杨磊  刘欣  张宇  卢帝同 一.拉格朗日2018--<飞词> 1.1.NABCD分析 N(Need,需求):该小 ...

  6. Beta发布 _thunder_文案+美工展示

    作业要求:https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/1366 团队介绍:thunder 组成员及各位博客地址: 1.王航:htt ...

  7. 实验三 Java猜数字游戏开发

    课程:Java实验   班级:201352     姓名:程涵  学号:20135210 成绩:             指导教师:娄佳鹏   实验日期:15.06.03 实验密级:         ...

  8. AVL树/线索二叉树

    此文转载: http://www.cnblogs.com/skywang12345/p/3577360.html AVL树是一棵特殊的高度平衡的二叉树,每个节点的两棵子树高度最大差为1.所以在每次的删 ...

  9. pygame学习笔记(2)——从画点到动画

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 1.单个像素(画点)利用pygame画点主要有三种方法:方法一:画长宽为1个像素的正方形 #@小五义 http:/ ...

  10. PHP 常用函数总结(四)

    9.PHP常用判断函数 is_bool();//判断是否为布尔型 is_float(); //判断是否为浮点型 is_int(); //判断是否为整型 is_numeric(); //判断是否为数值型 ...