在oracle和mysql中定义表时,有时会遇到字段类型选择上的差异,今天就区分一下这些差异。
varchar mysql的长度是0到65535,mysql中定义长度默认按字符长度计算,如果是GBK编码的话 汉字将占用2个字节,如果超过了65535,类型将会转换成 mediumtext
例:oracle中定义:varchar2(10), name字段能存放:10个字符或3个汉字,注意:如果oracle安装时 utf-8的话:3个字节是一个汉字,如果是gbk的 话两个字节一个汉字 utf-8下 1汉字=3字节 ghk下 1汉字=2字节
mysql中定义:varchar(10),name字段能存放:10文化字符或10个汉字
number mysql中的整数有:tinyint(-128,-127),smallint(-32768,32767),mediumint(-8388608,8388607),int(-2^31,2^31-1),bigint(-2^63,2^63-1)
oracle中为number:number(3,0) , number(5,0),number(7,0),number(10,0),number(20,0)
decimalnumeric 数值类型
float float(D,M) oracle可以用number代替
double 双精度浮点型 double(D,M) oracle 10g增加binary_double类
bit 位类型 bit(1到64) oracle中没有此类型
datetime 日期类型 oracle中 date类型,7字节类型存储,表示日期和时间, 例:-4712-01-01 00:00:00 至 9999-12-31 23:59:59 ,mysql中 date,字节 存储,只存储日期,没有时间 1000-01-01到9999-12-31,time,3字节存储,只存储时间,没有日期,datetime,占8字节存储,可以表示 日期 和时间,timestamp,占4字节存储,可以表示日期和时间,1970-01-01 00:00:00到2038-01-19 03:14:07
timestamp 高精度时间最多可以支持6位小数秒,oracle中占用空间7-11个字节、
year 年份, 1字节存储,只存储年份,范围1901到2155 oracle中没有些类型
char 定长字符串 范围0到255, oracle中 范围1到2000
unsigned 用于数值类型 oracle中不支持
clob tinytext最大支持255个字节,text最大支持65535个字节,mediumtext最大支持4GB字节,oracle中支持,10G以前版本支持4GB个字节,
10g后支持4GB个数据块,每个数据块大小为2kb-32kb
blob tinyblob最大支持255个字节,blob最大支持65535个字节,mediumblob最大支持16MB个字节,longblob最大支持4GB字节,oracle中和clob 范围一样大.
binary binary范围0-255,定长,varbinary范围0-65535,变长,oracle 中 raw范围 1-2000
enum 枚举类型,最多65535个元素,oracle 不支持
set 集合类型,最多64个元素 ,oracle 不支持
nationalchar 国际化字符集类型 ,oracle 中支持 nchar范围1-2000, nvarchar范围1-4000,nclob
bfile 外部文件指针类型 mysql 不支持,oracle 支持 文件大小最大4GB,文件名称最长255字符
自定义数据类型 mysql不支持 ,oracle支持自定义数据类型
xml类型 mysql不支持,oracle支持xml类型
自增类型 mysql支持,oracle不支持
字段默认表达式 mysql不支持函数和表达式,oracle支持函数和表达式
字段顺序修改功能,mysql中支持, alter table 表名 modify column id varchar(20) after name; oracle不支持这种修改。
虚拟字段 mysql不支持,oracle 11g支持 例 : create table 表名 ( id number, quantity number, price number , amout generated always as
(quantity * price ) virtual );
表字段数限制 mysql 中innodb最大1000个字段 ,所有字段总定义彻底不能超过65535字节,让你有固定长度字段的总彻底不超过半个数据块大小 (数据块大小一般为16k),oracle中最大 1000个字段
VARCHAR[0-65535] |