mysql与oracle 表字段定义比较 说明 mysql oracle VARCHAR 变长字符串 VARCHAR[0-65535] 定义长度默认按字符长度计算,如果是 GBK 编码的汉字将占用 2 个字节 VARCHAR2[1-4000] VARCHAR 是 VARCHAR2 的同义词 定义默认按字节长度计算 TINYINT SMALLINT MEDIU
mysql与oracle 表字段定义比较
说明
mysql
oracle
VARCHAR
变长字符串
VARCHAR[0-65535]
定义长度默认按字符长度计算,如果是 GBK 编码的汉字将占用 2 个字节
VARCHAR2[1-4000]
VARCHAR 是 VARCHAR2 的同义词
定义默认按字节长度计算
TINYINT
SMALLINT
MEDIUMINT
INT
BIGINT
整数
TINYINT(-128-127)
SMALLINT(-32768-32767)
MEDIUMINT(-8388608-8388607)
INT(-2147483648-2147483647)
BIGINT(-9223372036854775808-9223372036854775807)
无专用类型,
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
NUMERIC
数值类型
DECIMAL[1-65[,0-30]]
NUMERIC 是 DECIMAL 的同义词
NUMBER 可表示数范围: 1*10^-130 至 1*10^126
NUMBER([1-38][,-84-127])
DECIMAL 、 NUMERIC 、 DEC 是 NUMBER 的同义词
FLOAT
浮点型
FLOAT(D,M)
oracle10g 开始增加 BINARY_FLOAT 类型
10g 以前无专用类型,可以用 NUMBER 代替
ORACLE 中有 FLOAT 和 REAL 类型,不过这是 NUMBER 的同义词
DOUBLE
双精度浮点型
DOUBLE(D,M)
oracle10g 开始增加 BINARY_DOUBLE 类型
10g 以前无专用类型,可以用 NUMBER 代替
ORACLE 中有 DOUBLE PRECISION 类型,不过这是 NUMBER 的同义词
BIT
位类型
BIT(1-64)
无
DATETIME
日期类型
DATE , 3 字节存储,只存储日期,没有时间,支持范围是 [1000-01-01] 至 [9999-12-31]
TIME , 3 字节存储,只存储时间,没有日期,支持范围是 [-838:59:59] 至 [838:59:59]
DATETIME ,占 8 字节存储,可表示日期和时间,支持范围是 [1000-01-01 0] 至 [9999-12-31 23:59:59]
TIMESTAMP ,占 4 字节存储,可表示日期和时间,范围是 [1970-01-01 0] 至 [2038-01-19 03:14:07]
DATE 类型
7 字节存储,可表示日期和时间,支持范围是 [-4712-01-01 0] 至 [9999-12-31 23:59:59]
TIMESTAMP
高精度日期
5.6.4 以前不支持小数秒精度
5.6.4 开始 TIME,DATETIME,TIMESTAMP 支持,最多可以 6 位小数秒,也就是微秒级别
TIMESTAMP[0-9]
占用空间 7-11 个字节,当小数秒精度为 0 时与 DATE 类型相同,小数秒最高精度可达 9 位,也就是纳精度
YEAR
年份
YEAR , 1 字节存储,只存储年份,支持范围是 [1901] 至 [2155]
无对应类型,可以用 NUMBER(3,0) 代替
CHAR
定长字符串
CHAR[0-255] ,定义长度默认按字符长度计算,最大保存 255 字符
CHAR[1-2000]
定义默认按字节长度计算
UNSIGNED
无符号说明
支持,用于数值类型
不支持
CLOB
大字符串,一般用于存储文本文件或超大描述及备注类信息
TINYTEXT 最大支持 255 个字节
TEXT 最大支持 65535 个字节
MEDIUMTEXT 最大支持 16MB 个字节
LONGTEXT 最大支持 4GB 字节
字段不支持默认值
支持 (CLOB)
oracle10g 以前最大支持 4GB 个字节
oracle10g 开始最大支持 4GB 个数据块,数据块大小为 2KB-32KB
oracle 还有一个 LONG 类型,是早期的存储大字符串类型,最大支持 2GB 字节 , 现已不推荐使用
BLOB
大二进制对象,一般用于存储文件或图片数据
TINYBLOB 最大支持 255 个字节
BLOB 最大支持 65535 个字节
MEDIUMBLOB 最大支持 16MB 个字节
LONGBLOB 最大支持 4GB 字节
字段不支持默认值
支持 (BLOB)
oracle10g 以前最大支持 4GB 个字节
oracle10g 开始最大支持 4G 个数据块,数据块大小为 2KB-32KB
oracle 还有一个 LONG RAW 类型,是早期的存储二进制类型,最大支持 2GB 字节 , 现已不推荐使用
BINARY
二进制信息
BINARY(0-255) ,定长
VARBINARY(0-65535) ,变长
RAW(1-2000)
ENUM
枚举类型
ENUM(v1,v2,v3,...), 最多 65535 个元素
不支持
SET
集合类型
SET(v1,v2,v3,...) ,最多 64 个元素
不支持
NATIONAL CHAR
国际化字符集类型,较少使用
无, MYSQL 可以对每个字段指定字符编码
支持
NCHAR(1-2000)
NVARCHAR(1-4000)
NCLOB
BFILE
外部文件指针类型
不支持
支持
文件大小最大 4GB
文件名称最长 255 字符
自定义数据类型
不支持
支持
XML 类型
不支持
支持
自增类型
自动增长类型
支持
使用简单
不支持
一般使用 SEQUENCE 解决,用法与自增类型差别较大,使用较复杂,但能实现非常灵活的应用,包括字符自增主键、全局主键等等
字段默认值表达式
不支持函数和表达式
TEXT 和 BLOB 字段类型不支持默认值
支持函数和表达式
字段顺序修改
支持,例如,把 emp 表的 id 字段顺序放在 name 字段后面:
alter table emp modify column id varchar(20) after name;
不支持,只能重建表或字段
虚拟字段
虚拟字段是一个逻辑字段定义,其结果值通常是一个表达式,并在表中存储物理值,不占用空间,主要用于简化查询逻辑。比如有一个商品销售表有单价和数量两个字段,那可以建一个虚拟字段金额,其表达式 = 单价 * 数量
不支持
11g 支持,例:
create table sales
(
id number,
quantity number,
price number,
amount GENERATED always as (quantity*price) virtual
);
表字段数限制
INNODB 最大 1000 个字段
所有字段总定义长度不能超过 65535 字节
所有固定长度字段的总长度不超过半个数据块大小 ( 数据块大小一般为 16K)
最大 1000 个字段
我的新浪微博: http://weibo.com/yzsind
查看更多关于mysql与oracle表字段定义比较的详细内容...