您好,欢迎来到尔游网。
搜索
您的当前位置:首页MySQL与Oracle数据类型对应关系(表格形式)

MySQL与Oracle数据类型对应关系(表格形式)

来源:尔游网
MySQL与Oracle数据类型对应关系(表格形式)

MySQL与Oracle两种数据库在⼯作中,都是⽤的⽐较多的数据库,由于MySQL与Oracle在数据类型上有部分差异,在我们迁移数据库时,会遇上⼀定的⿇烦,下⾯介绍MySQL与Oracle数据库数据类型的对应关系。⼀、常见数据类型在MySQL与Oracle数据库中的表现形式说明

mysql

VARCHAR[0-65535]

oracle

VARCHAR2[1-4000]

VARCHAR是VARCHAR2的同义词

变长字符串

定义长度默认按字符长度计算,如果是GBK编码的汉字将占⽤2个字节定义默认按字节长度计算

⽆专⽤类型,

TINYINT可以⽤NUMBER(3,0)代替

SMALLINT可以⽤NUMBER(5,0)代替

MEDUIMINT可以⽤NUMBER(7,0)代替

INT可以⽤NUMBER(10,0)代替

BIGINT可以⽤NUMBER(20,0)代替

TINYINT(-128-127)SMALLINT(-32768-32767)MEDIUMINT(-8388608-8388607)

INT(-21474838-21474837)BIGINT(-9223372036854775808-9223372036854775807)

整数

ORACLE中有

SMALLINT,INT,INTEGER类型,不过这是NUMBER(38,0)的同义词

NUMBER 可表⽰数范围: 1*10^-130⾄1*10^126

数值类型

DECIMAL[1-65[,0-30]]NUMBER([1-38][,-84-127])NUMERIC是DECIMAL的同义

DECIMAL、NUMERIC、DEC是NUMBER的同义词oracle10g开始增加BINARY_FLOAT类型

浮点型

FLOAT(D,M)

10g以前⽆专⽤类型,可以⽤NUMBER代替

ORACLE中有FLOAT和REAL类型,不过这是NUMBER的同义词oracle10g开始增加

BINARY_DOUBLE类型

双精度浮点型

DOUBLE(D,M)

10g以前⽆专⽤类型,可以⽤NUMBER代替

ORACLE中有DOUBLE

PRECISION类型,不过这是NUMBER的同义词⽆

位类型BIT(1-)

位类型

⽇期类型

⾼精度⽇期

年份定长字符串⽆符号说明

BIT(1-)⽆DATE,3字节存储,只存储⽇期,没有时间,⽀持范围是[1000-01-01]⾄[9999-12-31]TIME,3字节存储,只存储时间,没有⽇期,⽀持范围是[-DATE类型

838:59:59]⾄[838:59:59]

7字节存储,可表⽰⽇期和时

DATETIME,占8字节存储,可

间,⽀持范围是[-4712-01-01

表⽰⽇期和时间,⽀持范围是

00:00:00]⾄[9999-12-31

[1000-01-01 00:00:00]⾄[9999-23:59:59]

12-31 23:59:59]

TIMESTAMP,占4字节存储,可表⽰⽇期和时间,范围是[1970-01-01 00:00:00]⾄[2038-01-19 03:14:07]

5.6.4以前不⽀持⼩数秒精度TIMESTAMP[0-9]5.6.4开始占⽤空间7-11个字节,当⼩数秒TIME,DATETIME,TIMESTAMP精度为0时与DATE类型相同,⼩⽀持,最多可以6位⼩数秒,也数秒最⾼精度可达9位,也就是就是微秒级别纳精度

YEAR,1字节存储,只存储年⽆对应类型,可以⽤份,⽀持范围是[1901]⾄[2155]NUMBER(3,0)代替CHAR[0-255],定义长度默认CHAR[1-2000]按字符长度计算,最⼤保存255

定义默认按字节长度计算字符

⽀持,⽤于数值类型不⽀持

⽀持(CLOB)

TINYTEXT 最⼤⽀持255个字节oracle10g以前最⼤⽀持4GB个字

节TEXT最⼤⽀持65535个字节

MEDIUMTEXT最⼤⽀持16MB

oracle10g开始最⼤⽀持4GB个数

⼤字符串,⼀般⽤于存储⽂本⽂件或超⼤描述及备注类信息个字节

据块,数据块⼤⼩为2KB-32KB

LONGTEXT最⼤⽀持4GB字节

字段不⽀持默认值

oracle还有⼀个LONG类型,是早期的存储⼤字符串类型,最⼤⽀持2GB字节,现已不推荐使⽤⽀持(BLOB)

⼆进制对象,⼀般⽤于存储⽂件或图⽚数据

TINYBLOB 最⼤⽀持255个字

oracle10g以前最⼤⽀持4GB个字节

节BLOB最⼤⽀持65535个字节

MEDIUMBLOB最⼤⽀持16MB 个字节

oracle10g开始最⼤⽀持4G个数

LONGBLOB最⼤⽀持4GB字节据块,数据块⼤⼩为2KB-32KB

字段不⽀持默认值

oracle还有⼀个LONG RAW类型,是早期的存储⼆进制类型,最⼤⽀持2GB字节,现已不推荐使⽤

⼆进制信息枚举类型集合类型

国际化字符集类型,较少使⽤

外部⽂件指针类型

BINARY(0-255),定长

RAW(1-2000)

VARBINARY(0-65535),变长ENUM(v1,v2,v3,...),最多65535不⽀持

个元素

SET(v1,v2,v3,...),最多个元

不⽀持

⽀持

⽆,MYSQL可以对每个字段指NCHAR(1-2000)定字符编码NVARCHAR(1-4000)

NCLOB⽀持

不⽀持⽂件⼤⼩最⼤4GB

⽂件名称最长255字符不⽀持

⽀持

不⽀持不⽀持⾃动增长类型

⽀持

使⽤简单

⽀持⽀持不⽀持

⼀般使⽤SEQUENCE解决,⽤法与⾃增类型差别较⼤,使⽤较复杂,但能实现⾮常灵活的应⽤,包括字符⾃增主键、全局主键等等

不⽀持函数和表达式

TEXT和BLOB字段类型不⽀持⽀持函数和表达式

默认值

⽀持,例如,把emp表的id字段顺序放在name字段后⾯:

不⽀持,只能重建表或字段

alter table emp modify columnid varchar(20) after name;

11g⽀持,例:create table sales(

虚拟字段是⼀个逻辑字段定义,其结果值通常是⼀个表达

id number,

式,并在表中存储物理值,不占⽤空间,主要⽤于简化查询

不⽀持 quantity number,

逻辑。⽐如有⼀个商品销售表有单价和数量两个字段,那可

price number,

以建⼀个虚拟字段⾦额,其表达式=单价*数量

amount GENERATED alwaysas (quantity*price) virtual);

INNODB 最⼤1000个字段所有字段总定义长度不能超过65535字节

最⼤1000个字段

所有固定长度字段的总长度不超过半个数据块⼤⼩(数据块⼤⼩⼀般为16K)⼆、MySQL与Oracle数据库常见数据类型对应关系编

ORACLE号

1NUMBER2Varchar2(n)

MYSQLint / DECIMALvarchar(n)

注释

DECIMAL就是NUMBER(10,2)这样的结构INT就是是NUMBER(10),表⽰整型;MYSQL有很多类int型,tinyint mediumint bigint等,不同的int宽度不⼀样 

⽇期字段的处理

MYSQL⽇期字段分DATE和TIME两种,ORACLE⽇期字段只有DATE,包含年⽉⽇时分秒信息,⽤当前数据库的系统时间为 SYSDATE, 精确到秒,或者⽤字符串转换成⽇期型函数TO_DATE(‘2001-08-01','YYYY-MM-DD')年-⽉-⽇ 24⼩时:分钟:秒的格式YYYY-MM-DD HH24:MI:SS TO_DATE()还有很多种⽇期格式, 可以参看ORACLEDOC.⽇期型字段转换成字符串函数TO_CHAR(‘2001-08-01','YYYY-MM-DDHH24:MI:SS')

⽇期字段的数算公式有很⼤的不同。MYSQL找到离当前时间7天⽤ DATE_FIELD_NAME > SUBDATE(NOW(),INTERVAL 7

DAY)ORACLE找到离当前时间7天⽤ DATE_FIELD_NAME >SYSDATE - 7;MYSQL中插⼊当前时间的⼏个函数是:NOW()函数以`'YYYY-MM-DD

HH:MM:SS'返回当前的⽇期时间,可以直接存到DATETIME字段中。CURDATE()以'YYYY-MM-DD'的格式返回今天的⽇期,可以直接存到DATE字段中。

CURTIME()以'HH:MM:SS'的格式返回当前的时间,可以直接存到TIME字段中。例:insert into tablename (fieldname) values (now())

⽽oracle中当前时间是sysdate

int / INTEGERMysql中INTEGER等价于int

SQLEXCEPTION 详见<<2009001-eService-O2MG.doc>>中2.5 Mysql异常处理mysql中没有

CONSTANT关键从ORACLE迁移到MYSQL,所有CONSTANT常量只能定义成变量字

3DateDATATIME

4INTEGER5EXCEPTION6

CONSTANTVARCHAR2(1)

7TYPE g_grp_cur IS光标 : mysql中有详见<<2009001-eService-O2MG.doc>>中2.2 光标处理REF CURSOR;替代⽅案TYPE数组: mysql中借助unpacklist_type IS临时表处理TABLE OF或者直接写逻辑到8详见<<2009001-eService-O2MG.doc>>中2.4 数组处理VARCHAR2(2000)相应的代码中,INDEX BY直接对集合中每个BINARY_INTEGER;值进⾏相应的处理

MYSQL有⾃动增长的数据类型,插⼊记录时不⽤操作此字段,会⾃动获得数据值。

⾃动增长的数据类

9⾃动增长的序列ORACLE没有⾃动增长的数据类型,需要建⽴⼀个⾃动增长的序列号,插⼊记录时

要把序列号的下⼀个值赋于此字段。空字符的处理

MYSQL的⾮空字段也有空的内容,ORACLE⾥定义了⾮空字段就不容许有空的内

10NULLNULL容。按MYSQL的NOT NULL来定义ORACLE表结构, 导数据的时候会产⽣错误。因

此导数据时要对空字符进⾏判断,如果为NULL或空字符,需要把它改成⼀个空格的字符串。MySQL与Oracle 差异⽐较之基本语法编

类别号

ORACLE

MYSQL

注释

变量的

1声明⽅li_index NUMBER := 0式不同变量的

2赋值⽅lv_inputstr := iv_inputstr式不同

EXIT;

跳出(退while 条件 loop3

出)语exit;

句不同end loop;TYPE g_grp_cur IS REF

定义游4CURSOR;标

TYPE unpacklist_type IS

定义数TABLE OF5组VARCHAR2(2000) INDEX

BY BINARY_INTEGER;

注释⽅ \"-- message\" 或 \"/** …. 6

式不同*/\" 或\"/* …. */\"⾃带⽇期时间7

函数格式不同

1. mysql 使⽤DECLARE定义局部变量.

定义变量语法为: DECLARE var_name[,...] type

DECLARE li_index

[DEFAULT value] 要给变量提供⼀个默认值,需要包含⼀

INTEGER DEFAULT 0

个DEFAULT⼦句。值可以被指定为⼀个表达式,不需要为⼀个常数。如果没有DEFAULT⼦句,初始值为NULL。 1. oracle变量赋值使⽤:=

SET lv_inputstr = iv_inputstr mysql 使⽤赋值使⽤set关键字. 将⼀个值赋给⼀个变量时

使⽤\"=\".

LEAVE procedure name;1. oracle: 如果exit语句在循环中就退出当前循环.如果exit语

句不再循环中,就退出当前过程或⽅法.

label_name:while 条件 do Mysql: 如果leave语句后⾯跟的是存储过程名,则退出当前 leave label_name;存储过程. 如果leave语句后⾯跟的是lable名. 则退出当前end while label_name;lable.

DECLARE cursor_nameoracle可以先定义游标,然后给游标赋值. CURSORmysql定义游标时就需要给游标赋值. Mysql定义游标出⾃FOR SELECT_statement;Mysql 5.1 参考⼿册20.2.11.1.声明光标.

可以使⽤临时表代替oracle⽬前可以使⽤临时表来代替oracle数组.

数组, 也可以循环拆分字符详见<<2009002-OTMPPS-Difficult Questions-0001.doc>>来替代oracle数组.中2.4 Mysql数组处理部分\"-- message\" 或 \"/* …. */\" 或 \"#\"

8

⽇期加减

mysql注释来⾃ MySQL 5.1参考⼿册 9.5. 注释语法, 建议同oracle⼀样, 单⾏⽤--, 多⾏/* */

1. MYSQL⽇期字段分DATE和TIME两种.

ORACLE⽇期字段只有DATE,包含年⽉⽇时分秒信息.

Oracle时间格式:yyyy-MM-Mysql时间格式:%Y-%m-2. mysql中取当前系统时间为now()函数,精确到秒.

dd hh:mi:ss%d %H:%i:%s

oracle中取当前数据库的系统时间为SYSDATE, 精确到秒.

⽇期相加: date_add(now(),INTERVAL 180 DAY)

当前时间加N天: sysdate+N

⽇期相减: date_sub('1998- 

当前时间减N天: sysdate-N

01-01 00:00:00', interval '11:1:1' day_second)

1. oracle使⽤||连接字符串,也可以使⽤concat函数. 但Oracle的concat函数只能连接两个字符串.

Mysql使⽤concat⽅法连接字符串. MySQL的concat函数可以连接⼀个或者多个字符串,如

mysql> select concat('10'); 结果为: 10.

mysql> select concat('11','22','33','aa'); 结果为:112233aa

字符串

9连接符result := v_int1||v_int2;不同

set result

=concat(v_int1,v_int2);

2. \"||\"在Mysql是与运算

DECLARE l_bk_cur

CURSOR l_bk_cur IS

CURSOR

SELECT

FOR SELECT

B.BK_HDR_INT_KEY,

B.BK_HDR_INT_KEY,

B.BK_NUM

B.BK_NUM

FROM

FROM

ES_SR_DTL_VRB A,

ES_SR_DTL_VRB A,

ES_BK_HDR B

ES_BK_HDR B

定义游 WHERE详见<<2009002-OTMPPS-Difficult Questions-0001.doc>>10 WHERE标不同A.BK_HDR_INT_KEY =中2.2 Mysql游标处理部分

A.BK_HDR_INT_KEY =

B.BK_HDR_INT_KEY

B.BK_HDR_INT_KEY

AND b.BK_STATUS

AND b.BK_STATUS

!=

!=

ES_BK_PKG.g_status_can

ES_BK_PKG.g_status_can

AND

AND

A.SR_HDR_INT_KEY =

A.SR_HDR_INT_KEY =

ii_sr_hdr_int_key;

ii_sr_hdr_int_key;

事务回11ROLLBACK;ROLLBACK;oracle和mysql中使⽤⽅法相同滚GOTO12GOTO check_date;GOTO check_date;oracle和mysql中使⽤⽅法相同语句以上就是MySQL与Oracle数据类型对应关系的全部内容了

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- axer.cn 版权所有 湘ICP备2023022495号-12

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务