天天看點

Oracle 與 MySQL 的差異分析(2):資料類型

Oracle 與 MySQL 的差異分析(2):資料類型

Oracle 與 MySQL 的差異分析(2):資料類型

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 時,可以在展示時左補零。

Oracle 與 MySQL 的差異分析(2):資料類型

1.2 浮點數

在 Oracle 中一般使用 number(5,2) 這種方式,表示小數位為兩位,整數位最多三位。在 MySQL 中可以使用decimal(5,2),其實在 Oracle 中也可以用 decimal(5,2),它與 number(5,2) 是等價的。除此之外,MySQL 還支援 float(Oracle 也支援)和 double 類型。

Oracle 與 MySQL 的差異分析(2):資料類型

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 還支援其他字元串類型:

Oracle 與 MySQL 的差異分析(2):資料類型

需要注意 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 的時間類型都不支援毫秒。

Oracle 與 MySQL 的差異分析(2):資料類型

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’。