1. 程式人生 > 程式設計 >總結MySQL的資料型別

總結MySQL的資料型別

1. 整數型別

型別 位元組數 最小值 最大值
TINYINT 1 -128 127
SMALLINT 2 -2^15 2^16 - 1
MEDIUMINT 3 -2^23 2^24 - 1
INT 4 -2^31 2^31 - 1
BIGINT 8 -2^63 2^63 - 1

2. 定點數

price DECIMAL(5,2)

5代表十進位制數字總的位數,2表示小數點後面的位數。所以範圍為(-999.99, 999.99)

每9個十進位制數字用4個位元組表示。

999999999 --> ‭0011 1011 1001 1010 1100 1001 1111 1111‬

每個值的整數和分數部分的儲存分別確定。每個9位數的倍數需要4個位元組,並且“剩餘的”位需要4個位元組的一部分。

3. 浮點數

FLOAT(M,D) 、 REAL(M,D) 、 DOUBLE PRECISION(M,D)

4. BIT

BIT(M)

BIT(M)型別允許儲存M位值

M範圍為1-64,預設為1

5. 字串

  1. CHAR / VARCHAR

    CHAR和VARCHAR型別宣告的長度表示你想要儲存的最大字元數。它是一個長度,編碼集不同,每個字元長度也不同,所以後面的引數允許的最大值也不同。例如,CHAR(30)可以佔用30個字元。預設長度都為255。

    ​ CHAR列的長度固定為建立表時宣告的長度。長度可以為從0到255的任何值。當儲存CHAR值時,在它們的右邊填充空格以達到指定的長度。當檢索到CHAR值時,尾部的空格被刪除掉,所以,我們在儲存時字串右邊不能有空格,即使有,查詢出來後也會被刪除。

    ​ VARCHAR列中的值為可變長字串。長度可以指定為0到65,535之間的值(實際可指定的最大長度與編碼和其他欄位有關,比如,使用utf-8編碼格式,大小為標準格式大小的2倍,僅有一個varchar欄位時實測最大值僅21844,如果新增一個char(3),則最大取值減少3。整體最大長度是65,532位元組)。innodb規定至少一頁要儲存兩行以上的資料,而頁的大小是固定的。

    ​ 同CHAR對比,VARCHAR值儲存時只儲存需要的字元數,另加一個位元組來記錄長度(如果列宣告的長度超過255,則使用兩個位元組)。

    ​ VARCHAR值儲存時不進行填充。當值儲存和檢索時尾部的空格仍保留,符合標準SQL。

    ​ 如果分配給CHAR或VARCHAR列的值超過列的最大長度,則對值進行裁剪以使其適合。如果被裁掉的字元不是空格,則會產生一條警告。如果裁剪非空格字元,則會造成錯誤(而不是警告)並通過使用嚴格SQL模式禁用值的插入。

  2. BINARY/VARBINARY BINARY和VARBINARY型別類似於CHAR和VARCHAR型別,但是不同的是,它們儲存的不是字元字串,而是二進位制串。所以它們沒有字符集,並且排序和比較基於列值位元組的數值值。

    當儲存BINARY值時,在它們右邊填充0x00(零位元組)值以達到指定長度。取值時不刪除尾部的位元組。比較時所有位元組很重要(因為空格和0x00是不同的,0x00<空格),包括ORDER BY和DISTINCT操作。比如插入'a '會變成'a \0'。

    對於VARBINARY,插入時不填充字元,選擇時不裁剪位元組。比較時所有位元組很重要。

    當型別為BINARY的欄位為主鍵時,應考慮上面介紹的儲存方式。

  3. BLOB和TEXT型別

BLOB是一個二進位制大物件,可以容納可變數量的資料。有4種BLOB型別:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它們只是可容納值的最大長度不同。

有4種TEXT型別:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。這些對應4種BLOB型別,有相同的最大長度和儲存需求。

BLOB列被視為二進位制字串。TEXT列被視為字元字串,類似CHAR和BINARY。

  1. ENUM和SET
  1. size ENUM('x-small','small','medium','large','x-large')
  2. gender SET('男','女')

MySql中的ENUM和SET是一個字串物件,其值來自表建立時在列規定中顯式列舉的一列值。

SET最多64個值。ENUM最多可以有65,535個元素。

6. 時間日期

Data Type Zero Value
DATE '0000-00-00'
TIME '00:00:00'
DATETIME '0000-00-00 00:00:00'
TIMESTAMP '0000-00-00 00:00:00'
YEAR 0000

任意的分隔符都有效, ‘1998-06-29’ 和 ‘1998/05/22’都會在寫入後統一格式。