Oracle 与 MySQL 的差异分析(2):数据类型
1.1 整数
在Oracle中,一般使用 integer、 int或者 number(N),MySQL 也支持 integer 和 int,但不支持 number 或 number(N) 的类型。
MySQL 支持的整数类型如下,其中 amsllint 和 int(与 integer 等价)是标准定义,在 Oracle 中也支持,其他类型 Oracle 不支持。
在 MySQL 中可以用 decimal(3) 定义三位整数,等价于 Oracle 的 number(3),其实 Oracle 中的 decimal(3) 和 number(3) 也是等价的。
在 MySQL 中还可能看到 int(N) 这种定义方式,这里的 N 只影响显示宽度,当制定 zerofill 时,可以在展示时左补零。
1.2 浮点数
在 Oracle 中一般使用 number(5,2) 这种方式,表示小数位为两位,整数位最多三位。在 MySQL 中可以使用decimal(5,2),其实在 Oracle 中也可以用 decimal(5,2),它与 number(5,2) 是等价的。除此之外,MySQL 还支持 float(Oracle 也支持)和 double 类型。
1.3 字符串
在 Oracle 中,字符串一般用 varchar2(N) 来定义字符串类型,如果是表字段的话,它的最大长度是4000,varchar2 是变长类型,占用的空间由插入的数据决定,还可用 char(N) 来表示定长类型,不过一般很少用。
MySQL 支持 char 和 varchar,但不支持 varchar2,varchar2 是 Oracle 自定义的类型。char 的最大长度是255,varchar 的最大长度是 65535,这一点比 Oracle 好,Oracle 表字段的长度超过4000就要用 clob 类型了。除了 char 和 varchar,MySQL 还支持其他字符串类型:
需要注意 varchar2(N) 在 Oracle 中的 N 表示最大字节数,而 MySQL 的 varchar(N) 表示最大字符数。在 Oracle 需要使用 varchar2(N char) 才表示最大字符数是 N。
1.4 日期类型
在 Oracle 中,时间和日期类型使用 date,如果要精确到毫秒还可以使用 timestamp。在 MySQL 中,date 类型仅表示日期,不包含时分秒,而 time 类型只有时分秒。
如果要在 MySQL 中实现 Oracle 的 date 类型,既有日期又有时分秒,可以使用 datetime 或 timestamp,其中 timestamp 可以表示的范围比较小并且受时区影响。MySQL 还支持 year 类型表示年,可以更省空间。MySQL 的时间类型都不支持毫秒。
1.5 枚举类型
MySQL 中特有的类型,可以指定列的取值,比如可以指定性别的取值,如:
create table t_test_1(gender enum(‘M’,’F’));
对比这种列,如果插入的值不是定义的枚举值也不是 null,那么会自动转换成第一个枚举值,不区分大小写。
1.6 集合类型
集合类型也是 MySQL 特有的类型,它表示数据只能是指定元素的组合,如:
create table t_test_1(col set(‘a’, ‘b’,‘c’));
这个列可以插入‘a, b’,’a, c’,但是不能插入 abc 以外的字符,如果插入的数据有重复会自动去重,如插入‘b, a, b’,实际会转换成‘a, b’。