MySQL 資料型別
列的資料型別定義了該列可以容納的值:整數、字元、貨幣、日期和時間、二進位制等等。
MySQL 資料型別(版本 8.0)
資料庫表中的每一列都必須有一個名稱和一個數據型別。
SQL 開發人員在建立表時必須決定每列將儲存什麼型別的資料。資料型別是 SQL 理解每列中期望的資料型別的一種指南,它還標識了 SQL 將如何與儲存的資料進行互動。
MySQL 中有三種主要的資料型別:字串、數值和日期時間。
字串資料型別
資料型別 | 描述 |
---|---|
CHAR(size) | 固定長度字串(可以包含字母、數字和特殊字元)。size 引數指定列的字元長度,範圍從 0 到 255。預設值為 1。 |
VARCHAR(size) | 可變長度字串(可以包含字母、數字和特殊字元)。size 引數指定列的最大字元長度,範圍從 0 到 65535。 |
BINARY(size) | 等同於 CHAR(),但儲存二進位制位元組字串。size 引數指定列的位元組長度。預設值為 1。 |
VARBINARY(size) | 等同於 VARCHAR(),但儲存二進位制位元組字串。size 引數指定列的最大位元組長度。 |
TINYBLOB | 用於 BLOBs(二進位制大物件)。最大長度:255 位元組。 |
TINYTEXT | 儲存最大長度為 255 個字元的字串。 |
TEXT(size) | 儲存最大長度為 65,535 位元組的字串。 |
BLOB(size) | 用於 BLOBs(二進位制大物件)。儲存最多 65,535 位元組的資料。 |
MEDIUMTEXT | 儲存最大長度為 16,777,215 個字元的字串。 |
MEDIUMBLOB | 用於 BLOBs(二進位制大物件)。儲存最多 16,777,215 位元組的資料。 |
LONGTEXT | 儲存最大長度為 4,294,967,295 個字元的字串。 |
LONGBLOB | 用於 BLOBs(二進位制大物件)。儲存最多 4,294,967,295 位元組的資料。 |
ENUM(val1, val2, val3, ...) | 一種字串物件,只能包含一個值,該值是從可能值列表中選擇的。您可以在 ENUM 列表中列出最多 65,535 個值。如果插入了不在列表中的值,則會插入一個空值。值按您輸入的順序排序。 |
SET(val1, val2, val3, ...) | 一種字串物件,可以包含 0 個或多個值,這些值是從可能值列表中選擇的。您可以在 SET 列表中列出最多 64 個值。 |
數值資料型別
資料型別 | 描述 |
---|---|
BIT(size) | 一種位值型別。每值的位數由size指定。size 引數可以容納 1 到 64 的值。size 的預設值為 1。 |
TINYINT(size) | 非常小的整數。有符號範圍是 -128 到 127。無符號範圍是 0 到 255。size 引數指定最大顯示寬度(為 255)。 |
BOOL | 零被視為 false,非零值被視為 true。 |
BOOLEAN | 等同於 BOOL。 |
SMALLINT(size) | 小的整數。有符號範圍是 -32768 到 32767。無符號範圍是 0 到 65535。size 引數指定最大顯示寬度(為 255)。 |
MEDIUMINT(size) | 中等整數。有符號範圍是 -8388608 到 8388607。無符號範圍是 0 到 16777215。size 引數指定最大顯示寬度(為 255)。 |
INT(size) | 中等整數。有符號範圍是 -2147483648 到 2147483647。無符號範圍是 0 到 4294967295。size 引數指定最大顯示寬度(為 255)。 |
INTEGER(size) | 等同於 INT(size)。 |
BIGINT(size) | 大的整數。有符號範圍是 -9223372036854775808 到 9223372036854775807。無符號範圍是 0 到 18446744073709551615。size 引數指定最大顯示寬度(為 255)。 |
FLOAT(size, d) | 浮點數。總位數由size指定。小數點後的位數由d引數指定。此語法在 MySQL 8.0.17 中已棄用,並且將在未來的 MySQL 版本中移除。 |
FLOAT(p) | 浮點數。MySQL 使用p值來確定是使用 FLOAT 還是 DOUBLE 作為結果資料型別。如果p從 0 到 24,則資料型別為 FLOAT()。如果p從 25 到 53,則資料型別為 DOUBLE()。 |
DOUBLE(size, d) | 正常大小的浮點數。總位數由size指定。小數點後的位數由d引數指定。 |
DOUBLE PRECISION(size, d) | |
DECIMAL(size, d) | 精確的定點數。總位數由size指定。小數點後的位數由d引數指定。size 的最大值為 65。d 的最大值為 30。size 的預設值為 10。d 的預設值為 0。 |
DEC(size, d) | 等同於 DECIMAL(size,d)。 |
注意:所有數值資料型別都可以有一個額外的選項:UNSIGNED 或 ZEROFILL。如果新增 UNSIGNED 選項,MySQL 將不允許該列使用負值。如果新增 ZEROFILL 選項,MySQL 會自動為該列新增 UNSIGNED 屬性。
日期和時間資料型別
資料型別 | 描述 |
---|---|
DATE | 日期。格式:YYYY-MM-DD。支援的範圍是 '1000-01-01' 到 '9999-12-31'。 |
DATETIME(fsp) | 日期和時間組合。格式:YYYY-MM-DD hh:mm:ss。支援的範圍是 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'。在列定義中新增 DEFAULT 和 ON UPDATE 以實現自動初始化和更新為當前日期和時間。 |
TIMESTAMP(fsp) | 時間戳。TIMESTAMP 值儲存為自 Unix 紀元('1970-01-01 00:00:00' UTC)以來的秒數。格式:YYYY-MM-DD hh:mm:ss。支援的範圍是 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC。可以使用列定義中的 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP 指定自動初始化和更新為當前日期和時間。 |
TIME(fsp) | 時間。格式:hh:mm:ss。支援的範圍是 '-838:59:59' 到 '838:59:59'。 |
YEAR | 四位數的年份。四位數格式允許的值:1901 到 2155,以及 0000。 MySQL 8.0 不支援兩位數格式的年份。 |