MySQL与Oracle两种数据库在工作中,都是用的比较多的数据库,由于MySQL与Oracle在数据类型上有部分差异,在我们迁移数据库时,会遇上一定的麻烦,下面介绍MySQL与Oracle数据库数据类型的对应关系。
一、常见数据类型在MySQL与Oracle数据库中的表现形式
说明 |
mysql |
oracle |
变长字符串 |
VARCHAR[0-65535] 定义长度默认按字符长度计算,如果是GBK编码的汉字将占用2个字节 |
VARCHAR2[1-4000] 定义默认按字节长度计算 |
整数 |
TINYINT(-128-127) SMALLINT(-32768-32767) MEDIUMINT(-8388608-8388607) INT(-2147483648-2147483647) |
无专用类型, TINYINT可以用NUMBER(3,0)代替 SMALLINT可以用NUMBER(5,0)代替 MEDUIMINT可以用NUMBER(7,0)代替 INT可以用NUMBER(10,0)代替 BIGINT可以用NUMBER(20,0)代替
ORACLE中有SMALLINT,INT,INTEGER类型,不过这是NUMBER(38,0)的同义词 |
数值类型 |
DECIMAL[1-65[,0-30]] |
NUMBER 可表示数范围: 1*10^-130至1*10^126 NUMBER([1-38][,-84-127])
DECIMAL、NUMERIC、DEC是NUMBER的同义词 |
浮点型 |
FLOAT(D,M) |
oracle10g开始增加BINARY_FLOAT类型 10g以前无专用类型,可以用NUMBER代替 ORACLE中有FLOAT和REAL类型,不过这是NUMBER的同义词 |
双精度浮点型 |
DOUBLE(D,M) |
oracle10g开始增加BINARY_DOUBLE类型 10g以前无专用类型,可以用NUMBER代替 ORACLE中有DOUBLE PRECISION类型,不过这是NUMBER的同义词 |
位类型 |
BIT(1-64) |
无 |
日期类型 |
DATE,3字节存储,只存储日期,没有时间,支持范围是[1000-01-01]至[9999-12-31] |
DATE类型 |
高精度日期 |
5.6.4以前不支持小数秒精度 |
TIMESTAMP[0-9] |
年份 |
YEAR,1字节存储,只存储年份,支持范围是[1901]至[2155] |
无对应类型,可以用NUMBER(3,0)代替 |
定长字符串 |
CHAR[0-255],定义长度默认按字符长度计算,最大保存255字符 |
CHAR[1-2000] 定义默认按字节长度计算 |
无符号说明 |
支持,用于数值类型 |
不支持 |
大字符串,一般用于存储文本文件或超大描述及备注类信息 |
TINYTEXT 最大支持255个字节 |
支持(CLOB) oracle10g开始最大支持4GB个数据块,数据块大小为2KB-32KB oracle还有一个LONG类型,是早期的存储大字符串类型,最大支持2GB字节,现已不推荐使用 |
二进制对象,一般用于存储文件或图片数据 |
TINYBLOB 最大支持255个字节 LONGBLOB最大支持4GB字节
字段不支持默认值 |
支持(BLOB) oracle10g以前最大支持4GB个字节 oracle10g开始最大支持4G个数据块,数据块大小为2KB-32KB oracle还有一个LONG RAW类型,是早期的存储二进制类型,最大支持2GB字节,现已不推荐使用 |
二进制信息 |
BINARY(0-255),定长 |
RAW(1-2000) |
枚举类型 |
ENUM(v1,v2,v3,...),最多65535个元素 |
不支持 |
集合类型 |
SET(v1,v2,v3,...),最多64个元素 |
不支持 |
国际化字符集类型,较少使用 |
无,MYSQL可以对每个字段指定字符编码 |
支持 |
外部文件指针类型 |
不支持 |
支持 |
|
不支持 |
支持 |
|
不支持 |
支持 |
自动增长类型 |
支持 |
不支持 |
|
不支持函数和表达式 |
支持函数和表达式 |
|
支持,例如,把emp表的id字段顺序放在name字段后面: |
不支持,只能重建表或字段 |
虚拟字段是一个逻辑字段定义,其结果值通常是一个表达式,并在表中存储物理值,不占用空间,主要用于简化查询逻辑。比如有一个商品 您可能想查找下面的文章: |