mysql與oracle表字段定義比較
說明
mysql
oracle
VARCHAR
www.2cto.com
變長字符串
VARCHAR[0-65535]
定義長度默認按字符長度計算,如果是GBK編碼的漢字將占用2個字節,如果字段定義總字節長度超過65535將自動轉化為MEDIUMTEXT類型定義
VARCHAR2[1-4000]
VARCHAR是VARCHAR2的同義詞
定義默認按字節長度計算
TINYINT
SMALLINT
www.2cto.com
MEDIUMINT
INT
BIGINT
整數
TINYINT(-128-127)
SMALLINT(-32768-32767)
MEDIUMINT(-8388608-8388607)
INT(-2147483648-2147483647)
BIGINT(-9223372036854775808-9223372036854775807)
無專用類型,
www.2cto.com
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
浮點型
www.2cto.com
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
日期類型
www.2cto.com
DATE,3字節存儲,只存儲日期,沒有時間,支持范圍是[1000-01-01]至[9999-12-31]
TIME,3字節存儲,只存儲時間,沒有日期,支持范圍是[-838:59:59]至[838:59:59]
DATETIME,占8字節存儲,可表示日期和時間,支持范圍是[1000-01-01 00:00:00]至[9999-12-31 23:59:59]
TIMESTAMP,占4字節存儲,可表示日期和時間,范圍是[1970-01-01 00:00:00]至[2038-01-19 03:14:07]
DATE類型
7字節存儲,可表示日期和時間,支持范圍是[-4712-01-01 00:00:00]至[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
www.2cto.com
年份
YEAR,1字節存儲,只存儲年份,支持范圍是[1901]至[2155]
無對應類型,可以用NUMBER(3,0)代替
CHAR
定長字符串
CHAR[0-255],定義長度默認按字符長度計算,最大保存255字符
CHAR[1-2000]
定義默認按字節長度計算
UNSIGNED
無符號說明
www.2cto.com
支持,用於數值類型
不支持
CLOB
大字符串,一般用於存儲文本文件或超大描述及備注類信息
TINYTEXT 最大支持255個字節
TEXT最大支持65535個字節
MEDIUMTEXT最大支持16MB個字節
LONGTEXT最大支持4GB字節
字段不支持默認值
支持(CLOB)
oracle10g以前最大支持4GB個字節
oracle10g開始最大支持4GB個數據塊,數據塊大小為2KB-32KB
oracle還有一個LONG類型,是早期的存儲大字符串類型,最大支持2GB字節,現已不推薦使用
BLOB
大二進制對象,一般用於存儲文件或圖片數據
www.2cto.com
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個元素
www.2cto.com
不支持
SET
集合類型
SET(v1,v2,v3,...),最多64個元素
不支持
NATIONAL CHAR
國際化字符集類型,較少使用
無,MYSQL可以對每個字段指定字符編碼
支持
NCHAR(1-2000)
NVARCHAR(1-4000)
NCLOB
BFILE
外部文件指針類型
不支持
支持
文件大小最大4GB
文件名稱最長255字符
自定義數據類型
www.2cto.com
不支持
支持
XML類型
不支持
支持
自增類型
自動增長類型
支持
使用簡單
不支持
一般使用SEQUENCE解決,用法與自增類型差別較大,使用較復雜,但能實現非常靈活的應用,包括字符自增主鍵、全局主鍵等等
字段默認值表達式
不支持函數和表達式
TEXT和BLOB字段類型不支持默認值
支持函數和表達式
字段順序修改
支持,例如,把emp表的id字段順序放在name字段後面:
alter table emp modify column id varchar(20) after name;
不支持,只能重建表或字段
www.2cto.com
虛擬字段
虛擬字段是一個邏輯字段定義,其結果值通常是一個表達式,並在表中存儲物理值,不占用空間,主要用於簡化查詢邏輯。比如有一個商品銷售表有單價和數量兩個字段,那可以建一個虛擬字段金額,其表達式=單價*數量
不支持
11g支持,例:
create table sales
(
id number,
quantity number,
price number,
amount GENERATED always as (quantity*price) virtual
);
表字段數限制
INNODB 最大1000個字段
所有字段總定義長度不能超過65535字節
所有固定長度字段的總長度不超過半個數據塊大小(數據塊大小一般為16K)
最大1000個字段