MySQL 數(shù)據類型

2021-04-07 16:09 更新

MySQL 數(shù)據類型

MySQL 的數(shù)據類型有大概可以分為 5 種,分別是:

  • 整數(shù)類型(含:整數(shù)類型和浮點數(shù)類型)
    • 整數(shù)類型包括 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT
  • 浮點數(shù)類型和定點數(shù)類型
    • 浮點數(shù)類型包括 FLOAT 和 DOUBLE,定點數(shù)類型為 DECIMAL
  • 日期和時間類型
    • YEAR、TIME、DATE、DATETIME 和 TIMESTAMP
  • 字符串類型
    • CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 和 SET 等
  • 二進制類型
    • BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB

整數(shù)類型

MySQL 主要提供的整數(shù)類型有 TINYINT、 SMALLINTMEDIUMINT、 INT、 BIGINT,其屬性字段可以添加 AUTO_INCREMENT 自增約束條件。

類型名稱 說明 存儲需求
TINYINT 很小的整數(shù) 1個字節(jié)
SMALLINT 小的整數(shù) 2個宇節(jié)
MEDIUMINT 中等大小的整數(shù) 3個字節(jié)
INT (INTEGHR) 普通大小的整數(shù) 4個字節(jié)
BIGINT 大整數(shù) 8個字節(jié)

不同的整數(shù)類型有不同的取值范圍,并且需要不同的存儲空間,因此應根據實際需要選擇最合適的類型,這樣有利于提高查詢的效率和節(jié)省存儲空間。

類型名稱 說明 存儲需求
TINYINT -128?127 0 ?255
SMALLINT -32768?32767 0?65535
MEDIUMINT -8388608?8388607 0?16777215
INT (INTEGER) -2147483648?2147483647 0?4294967295
BIGINT -9223372036854775808?9223372036854775807 0?18446744073709551615

小數(shù)類型

MySQL 中使用浮點數(shù)和定點數(shù)來表示小數(shù)。浮點類型有兩種,分別是單精度浮點數(shù)( FLOAT)和雙精度浮點數(shù)( DOUBLE);定點類型只有一種 DECIMAL。

浮點類型和定點類型都可以用 (M, D)來表示,其中 M稱為精度,表示總共的位數(shù); D稱為標度,表示小數(shù)的位數(shù)。

浮點數(shù)類型的取值范圍為 M(1~255)和 D(1~30,且不能大于 M-2),分別表示顯示寬度和小數(shù)位數(shù)。M 和 D 在 FLOAT 和DOUBLE 中是可選的,F(xiàn)LOAT 和 DOUBLE 類型將被保存為硬件所支持的最大精度。DECIMAL 的默認 D 值為 0、M 值為 10。

類型名稱 說明 存儲需求
FLOAT 單精度浮點數(shù) 4 個字節(jié)
DOUBLE 雙精度浮點數(shù) 8 個字節(jié)
DECIMAL (M, D),DEC 壓縮的“嚴格”定點數(shù) M+2 個字節(jié)

  • DECIMAL 的存儲空間并不是固定的,而由精度值 M 決定,占用 M+2 個字節(jié)。
  • 不論是定點還是浮點類型,如果用戶指定的精度超出精度范圍,則會四舍五入進行處理。
  • 定點數(shù)以字符串形式存儲,在對精度要求比較高的時候(如貨幣、科學數(shù)據),使用 DECIMAL 的類型比較好,
  • 兩個浮點數(shù)進行減法和比較運算時容易出現(xiàn)精度計算問題,盡量避免做浮點數(shù)比較。

日期和時間類型

MySQL 中表示日期的數(shù)據類型:YEAR、 TIMEDATE、 DTAETIMETIMESTAMP

類型名稱 日期格式 日期范圍 存儲需求
YEAR YYYY 1901 ~ 2155 1 個字節(jié)
TIME HH:MM:SS -838:59:59 ~ 838:59:59 3 個字節(jié)
DATE YYYY-MM-DD 1000-01-01 ~ 9999-12-3 3 個字節(jié)
DATETIME YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 8 個字節(jié)
TIMESTAMP YYYY-MM-DD HH:MM:SS 1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC 4 個字節(jié)

字符串類型

MySQL 中的字符串類型有 CHAR、 VARCHARTINYTEXT、 TEXT、 MEDIUMTEXT、 LONGTEXT、 ENUM、 SET 等。

類型名稱 說明 存儲需求
CHAR(M) 固定長度非二進制字符串 M 字節(jié),1<=M<=255
VARCHAR(M) 變長非二進制字符串 L+1字節(jié),在此,L< = M和 1<=M<=255
TINYTEXT 非常小的非二進制字符串 L+1字節(jié),在此,L<2^8
TEXT 小的非二進制字符串 L+2字節(jié),在此,L<2^16
MEDIUMTEXT 中等大小的非二進制字符串 L+3字節(jié),在此,L<2^24
LONGTEXT 大的非二進制字符串 L+4字節(jié),在此,L<2^32
ENUM 枚舉類型,只能有一個枚舉字符串值 1或2個字節(jié),取決于枚舉值的數(shù)目 (最大值為65535)
SET 一個設置,字符串對象可以有零個或 多個SET成員 1、2、3、4或8個字節(jié),取決于集合 成員的數(shù)量(最多64個成員)

M表示可以為其指定長度。

CHAR 和 VARCHAR 類型

  • CHAR(M) 為固定長度字符串,定義時指定字符串列長。M 范圍 0~255 個字符。存儲時,尾部自動填充空格;被檢索時,尾部的空格將被刪除。
  • VARCHAR(M) 是長度可變的字符串,M 表示最大列的長度,M 范圍 0~65535。VARCHAR 的最大實際長度由最長的行的大小和使用的字符集確定,實際占用的空間為字符串的實際長度加 1。

TEXT 類型

TEXT 類型分為 4 種:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。

  • TINYTEXT 表示長度為 255(2^8-1)字符的 TEXT 列。
  • TEXT 表示長度為 65535(2^16-1)字符的 TEXT 列。
  • MEDIUMTEXT 表示長度為 16777215(2^24-1)字符的 TEXT 列。
  • LONGTEXT 表示長度為 4294967295 或 4GB(2^32-1)字符的 TEXT 列。

ENUM 類型

ENUM 是一個字符串對象,值為表創(chuàng)建時列規(guī)定中枚舉的一列值。

索引
NULL NULL
zero 0
first 1
second 2
third 3

SET 類型

SET 是一個字符串的對象,可以有零或多個值,最多可以有 64 個成員,各成員之間用逗號 ,隔開。列值有重復,自動刪除。

二進制類型

MySQL 中的二進制字符串有 BIT、 BINARY、 VARBINARYTINYBLOB、 BLOBMEDIUMBLOBLONGBLOB。

類型名稱 說明 存儲需求
BIT(M) 位字段類型 大約 (M+7)/8 字節(jié)
BINARY(M) 固定長度二進制字符串 M 字節(jié)
VARBINARY (M) 可變長度二進制字符串 M+1 字節(jié)
TINYBLOB (M) 非常小的BLOB L+1 字節(jié),在此,L<2^8
BLOB (M) 小 BLOB L+2 字節(jié),在此,L<2^16
MEDIUMBLOB (M) 中等大小的BLOB L+3 字節(jié),在此,L<2^24
LONGBLOB (M) 非常大的BLOB L+4 字節(jié),在此,L<2^32

M表示指定長度。

BIT 類型

位字段類型。范圍為 1~64。

BINARY 和 VARBINARY 類型

BINARY 和 VARBINARY 類型類似于 CHAR 和 VARCHAR,不同的是它們包含二進制字節(jié)字符串。

BLOB 類型

BLOB 是一個二進制的對象,用來存儲可變數(shù)量的數(shù)據。BLOB 類型分為 4 種:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。

數(shù)據類型 存儲范圍
TINYBLOB 最大長度為255 (28-1)字節(jié)
BLOB 最大長度為65535 (216-1)字節(jié)
MEDIUMBLOB 最大長度為16777215 (224-1)字節(jié)
LONGBLOB 最大長度為4294967295或4GB (231-1)字節(jié)
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號