DB2 Vs MySQL系列 | MySQL与DB2的数据类型对比
随着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的数据类型对比的更多相关文章
- MYSQL系列-Mysql存储引擎选择
MYSQL系列-Mysql存储引擎选择 //查看当前数据库支持的存储引擎 show engines \G; 创建表的时候可以通过engine=MyISAM指定存储引擎 MyISAM: .MYISAM不 ...
- MYSQL系列-MYSQL基础增强(Myql函数)
MYSQL基础增强(Myql函数) 在这里只介绍一些常用的,比较新颖的: 字符串函数: CONCAT://字符串连接函数 mysql> SELECT CONCAT('My', 'S', 'QL' ...
- mysql与oracle常用函数及数据类型对比
最近在转一个原来使用oracle,打算改为mysql的系统,有些常用的oracle函数的mysql实现顺便整理了下,主要是系统中涉及到的(其实原来是专门整理过一个详细doc的,只是每次找word麻烦) ...
- mysql与oracle常用函数及数据类型对比00持续补充
最近在转一个原来使用oracle,改为mysql的系统,有些常用的oracle函数的mysql实现顺便整理了下,主要是系统中涉及到的(其实原来是专门整理过一个详细doc的,只是每次找word麻烦). ...
- [转载]DB2与ORACLE、MYSQL比较2
原文地址:DB2与ORACLE.MYSQL比较2作者:欣颖 4.2 Oracle9i Oracle的产品战略是每12到18个月发布一个主要版本.主要发行版本所遵循的命名战略在PC领域中更为常见,它不 ...
- IT视频课程集(包含各类Oracle、DB2、Linux、Mysql、Nosql、Hadoop、BI、云计算、编程开发、网络、大数据、虚拟化
马哥Linux培训视频课程:http://pan.baidu.com/s/1pJwk7dp Oracle.大数据系列课程:http://pan.baidu.com/s/1bnng3yZ 天善智能BI培 ...
- Oracle、Db2、SqlServer、MySQL 数据库插入当前系统时间
做易买网项目,由于对数据库插入系统时间不了解,常常遇到的问题: 1.java.sql.SQLException: ORA-01861: 文字与格式字符串不匹配.原因:由于获取系统时间类型不对,应为sy ...
- Mysql系列九:使用zookeeper管理远程Mycat配置文件、Mycat监控、Mycat数据迁移(扩容)
一.使用zookeeper管理远程Mycat配置文件 环境准备: 虚拟机192.168.152.130: zookeeper,具体参考前面文章 搭建dubbo+zookeeper+dubboadmin ...
- Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案
一.前言 在前面的文章Mysql系列四:数据库分库分表基础理论中,已经说过分库分表需要应对的技术难题有如下几个: 1. 分布式全局唯一id 2. 分片规则和策略 3. 跨分片技术问题 4. 跨分片事物 ...
随机推荐
- aws存储桶s3使用
关于aws s3的使用说明: aws官方文档地址:https://docs.aws.amazon.com/s3/index.html#lang/zh_cn 创建s3与基础使用: 1.登陆aws控制台- ...
- 【SIKIA计划】_06_Unity2D游戏开发-拾荒者笔记
[新增分类]Animations 动画——Animation——AnimatorControllerPrefabs 预制 [素材导入]unitypackage 素材包Sprites Editor 编辑 ...
- 一个很NB的404页面
一个带彩蛋的 404 页面 不得不说这个程序猿很有才 前往404页面 触发方法 按住鼠标左键 在页面中心不停的画圈 就可以进入神奇的地方了
- 2.3 Oracle之DDL 语句(约束、伪列、视图、序列、同义词) 精简版
DDL Data Definition(重点) (n. 定义:[物] 清晰度:解说)用于定义数据的结构,创建,修改,删除数据库对象 一.表的增删改查 1.创建表:CREATE TABLE temp A ...
- PHPCMS V9 二次开发常用代码集
0:调用最新文章,带所在版块 {pc:get sql="SELECT a.title, a.catid, b.catid, b.catname, a.url as turl ,b.url a ...
- 2018NOIP爆0记第一弹
初赛篇 选择即王道 迪杰斯特拉那道题的A选项自己yy一下觉得甚是不妥,就没选 就和30分完美选择题擦肩而过. 填空最后一题不太会搞,就跳过了,最后蒙了个512上去...其实还有点接近的... 5分 然 ...
- windows的滚动条使用
背景 在毕业快一年的工作时间中,对windows编程的某些特性并不够熟悉,例如滚动条的使用.在一次需求中需要用到滚动条,在开发过程中走了不少弯路,因此需要做一些笔记总结一下学习到的内容. 先推荐几个写 ...
- 一种利用ADO连接池操作MySQL的解决方案(VC++)
VC++连接MySQL数据库 常用的方式有三种:ADO.mysql++,mysql API ; 本文只讲述ADO的连接方式. 为什么要使用连接池? 对于简单的数据库应用,完全可以先创建一个常连接(此连 ...
- JDK动态代理的简单理解
转载:http://www.cnblogs.com/luotaoyeah/p/3778183.html 动态代理 代理模式是 Java 中的常用设计模式,代理类通过调用被代理类的相关方法,提供预处理. ...
- 获取session
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()) ...