| MySQL、PostgreSQL和DB2之間的數據類型對比 SQL ANSI標准規定了關系數據庫系統中使用的數據類型的規則。但是,並非每種數據庫平台都支持標准委員會定義的每個數據類型。而且,特定數據類型的廠商實現可能與標准的規定不同,甚至在所有數據庫廠商之間互不相同。因此,盡管許多MySQL、PostgreSQL和DB2數據類型在名稱和/或含義方面是相似的,但是也有許多需要注意的差異。 表2列出最常用的DB2數據類型。我們在后面的小節中提供MySQL和PostgreSQL數據類型與DB2最接近的匹配。 盡管DB2對SQL有一些限制(比如對約束名的長度限制、數據類型限制等等),但是各個新版本正在系統化地消除這些限制。 |
||||||||||
| 數據類型 |
說明 |
|||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| BIGINT |
存儲有符號或無符號整數,使用8字節的存儲空間。 |
|||||||||
| BLOB |
存儲長度可變的二進制數據,長度最大為2 GB。超過1 GB的長度不進行日志記錄。 |
|||||||||
| CHAR(n) |
存儲固定長度的字符數據,長度最大為254字節。使用 ‘n’字節的存儲空間。 |
|||||||||
| CHAR(n) FOR BIT DATA |
存儲固定長度的二進制值。 |
|||||||||
| CLOB |
存儲長度可變的字符數據,長度最大為2 GB。超過1 GB的長度不進行日志記錄。 |
|||||||||
| DATE |
存儲日歷日期,不包含天內的時間。使用4字節的存儲空間。 |
|||||||||
| DEC(p,s) |
采用精度(p)1到31和刻度(s)0到31來存儲數值。使用(p/2) +1字節的存儲空間。 |
|||||||||
| DOUBLE |
存儲浮點數,使用8字節的存儲空間。 |
|||||||||
| FLOAT(p) |
采用精度(p)1到53來存儲數值。如果p <= 24,那么相當於REAL。如果p >= 25,那么相當於DOUBLE PRECISION。 |
|||||||||
| GRAPHIC(n) |
用於National Language Support(NLS)和長度固定的字符串(常常是DBCS),長度最大為127字節。對於雙字節字符集,使用n*2字節的存儲空間;對於單字節字符集,使用n字節的存儲空間。 |
|||||||||
| INT |
存儲有符號或無符號整數,使用4字節的存儲空間。 |
|||||||||
| REAL |
存儲浮點數,使用4字節的存儲空間。 |
|||||||||
| SMALLINT |
存儲有符號和無符號整數,使用2字節的存儲空間。 |
|||||||||
| TIME |
存儲天內的時間,使用3字節的存儲空間。 |
|||||||||
| TIMESTAMP |
存儲日期(年、月、日)和時間(小時、分鍾、秒),最大精度6毫秒。使用10字節的存儲空間。 |
|||||||||
| VARCHAR(n) |
存儲長度可變的字符數據,長度最大為32,672字節。使用n+2字節的存儲空間。 |
|||||||||
| VARCHAR(n) FOR BIT DATA |
存儲長度可變的二進制數據。使用n字節的存儲空間。 |
|||||||||
| VARGRAPHIC(n) |
存儲長度可變的雙字節字符數據,長度最大為16,336字符。使用(n*2)+2字節的存儲空間。 |
|||||||||
|
MySQL可以使用SERIAL別名作為數據類型,這相當於 BOOL或BOOLEAN是TINYINT(1)的同義詞。在MySQL中,DECIMAL的最大位數是65,支持的最大小數位是30。如果為DECIMAL指定UNSIGNED,那么不允許負數。 時間戳列不支持毫秒。 |
||||||||||
| 數據類型 |
說明 |
|||||||||
| BIT |
固定長度的位串。 |
|||||||||
| BOOLEAN |
存儲邏輯布爾值(true/false/unknown),可以是TRUE、true和1;FALSE、false和0。 |
|||||||||
| TINYBLOB |
用於存儲二進制對象(比如圖形)的原始二進制數據,最大255字節。 |
|||||||||
| BLOB |
用於存儲二進制對象(比如圖形)的原始二進制數據,最大65,535字節。 |
|||||||||
| MEDIUMBLOB |
用於存儲二進制對象(比如圖形)的原始二進制數據,最大16,777,215字節。 |
|||||||||
| LONGBLOB |
用於存儲二進制對象(比如圖形)的原始二進制數據,最大4GB。 |
|||||||||
| CHAR(n) |
包含固定長度的字符串,用空格填充到長度n。 |
|||||||||
| DATE |
用3字節的存儲空間存儲日歷日期(年、月、日)。 |
|||||||||
| DATETIME |
用8字節的存儲空間存儲日歷日期和天內的時間。 |
|||||||||
| YEAR |
用1字節的存儲空間存儲兩位或四位格式的年份。 |
|||||||||
| DECIMAL(p,s) |
存儲精確的數值,精度(p)最高為65,刻度(s)為30或更高。 |
|||||||||
| FLOAT |
存儲浮點數,限制由硬件決定。單精度浮點數精確到大約7位小數。UNSIGNED屬性不允許負數。 |
|||||||||
| DOUBLE |
存儲雙精度浮點數,限制由硬件決定。雙精度浮點數精確到大約15位小數。UNSIGNED屬性不允許負數。 |
|||||||||
| TINYINT |
存儲有符號或無符號1字節整數。 |
|||||||||
| SMALLINT |
存儲有符號或無符號2字節整數。 |
|||||||||
| MEDIUMINT |
存儲有符號或無符號3字節整數。 |
|||||||||
| INTEGER |
存儲有符號或無符號4字節整數。 |
|||||||||
| BIGINT |
存儲有符號或無符號8字節整數。 |
|||||||||
| TINYTEXT |
用於存儲最多255字節的字符串數據。 |
|||||||||
| TEXT |
用於存儲最多65,535字節的字符串數據。 |
|||||||||
| MEDIUMTEXT |
用於存儲最多16,777,215字節的字符串數據。 |
|||||||||
| LONGTEXT |
用於存儲最多4GB的字符串數據。 |
|||||||||
| TIME |
用3字節的存儲空間存儲天內的時間。 |
|||||||||
| TIMESTAMP |
用4字節的存儲空間存儲日期和時間。如果沒有提供有效值的話,TIMESTAMP列會自動設置為最近操作的日期和時間。 |
|||||||||
| VARCHAR(n) |
存儲長度可變的字符串,最大長度由n指定。末尾的空格不存儲。 |
|||||||||
| ENUM |
一種串對象,它的值只能是從值列表 ‘value1’, ‘value2’, ..., NULL中選擇的一個值。 |
|||||||||
| SET |
一種串對象,它可以具有零個或更多的值,這些值必須從值列表 ‘value1’, ‘value2’, ...中選擇。 |
|||||||||
| BINARY |
與CHAR類型相似,但是存儲二進制字節串而不是字符串。 |
|||||||||
| VARBINARY |
與VARCHAR類型相似,但是存儲二進制字節串而不是字符串。 |
|||||||||
| MYSQL |
DB2 |
說明 |
||||||||
| BIT |
CHAR(n) FOR BIT DATA |
關於用來簡化遷移的UDF的細節,請參閱參考資料。 |
||||||||
| BOOLEAN |
SMALLINT或CHAR(1) |
使用檢查約束來實施規則。 |
||||||||
| TINYBLOB |
VARCHAR(255) FOR BIT DATA |
可以使用BLOB(255)或VARCHAR(255) FOR BIT DATA。在這種情況下,使用VARCHAR效率比較高。 |
||||||||
| BLOB |
BLOB(64K) |
如果長度小於32K,那么考慮使用VARCHAR(n) FOR BIT DATA。 |
||||||||
| MEDIUMBLOB |
BLOB(16M) |
可以使用NOT LOGGED改進性能。 |
||||||||
| LONGBLOB |
BLOB(2G) |
支持的BLOB最大長度是2GB。 |
||||||||
| CHAR(n) |
CHAR(n) |
在DB2中,‘n’的最大值為254。 |
||||||||
| DATE |
DATE |
- |
||||||||
| DATETIME |
TIMESTAMP |
可以使用特殊寄存器CURRENT TIMEZONE對日期進行轉換。 |
||||||||
| YEAR |
SMALLINT |
可以使用檢查約束實施YEAR規則。 |
||||||||
| DECIMAL(p,s) |
DECIMAL(p,s) |
如果p大於31,那么使用DOUBLE。 |
||||||||
| FLOAT |
REAL |
_ |
||||||||
| DOUBLE |
DOUBLE |
_ |
||||||||
| SMALLINT |
SMALLINT |
使用檢查約束限制值小於256。 |
||||||||
| SMALLINT |
SMALLINT |
_ |
||||||||
| MEDIUMINT |
INTEGER |
如果需要,使用檢查約束限制最大長度。 |
||||||||
| INTEGER |
INTEGER |
_ |
||||||||
| BIGINT |
BIGINT |
_ |
||||||||
| TINYTEXT |
VARCHAR(255) |
對於少於32K的數據,使用VARCHAR比較高效。 |
||||||||
| TEXT |
CLOB(64K) |
DB2允許為CLOB或BLOB指定長度參數。指定需要的長度,而不要使用TINY、MEDIUM或LONG CLOB。 |
||||||||
| MEDIUMTEXT |
CLOB(16M) |
_ |
||||||||
| LONGTEXT |
CLOB(2G) |
最大長度是2GB。如果使用LOGGED,那么BLOB或CLOB的最大長度為1GB。使用NOT LOGGED選項可以提高性能。 |
||||||||
| TIME |
TIME |
_ |
||||||||
| TIMESTAMP |
TIMESTAMP |
_ |
||||||||
| VARCHAR(n) |
VARCHAR(n) |
如果長度小於32K,那么使用VARCHAR。 |
||||||||
| ENUM |
VARCHAR(n) |
使用檢查約束來實施規則。 |
||||||||
