總結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. 字串
-
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模式禁用值的插入。
-
BINARY/VARBINARY BINARY和VARBINARY型別類似於CHAR和VARCHAR型別,但是不同的是,它們儲存的不是字元字串,而是二進位制串。所以它們沒有字符集,並且排序和比較基於列值位元組的數值值。
當儲存BINARY值時,在它們右邊填充0x00(零位元組)值以達到指定長度。取值時不刪除尾部的位元組。比較時所有位元組很重要(因為空格和0x00是不同的,0x00<空格),包括ORDER BY和DISTINCT操作。比如插入'a '會變成'a \0'。
對於VARBINARY,插入時不填充字元,選擇時不裁剪位元組。比較時所有位元組很重要。
當型別為BINARY的欄位為主鍵時,應考慮上面介紹的儲存方式。
-
BLOB和TEXT型別
BLOB是一個二進位制大物件,可以容納可變數量的資料。有4種BLOB型別:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它們只是可容納值的最大長度不同。
有4種TEXT型別:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。這些對應4種BLOB型別,有相同的最大長度和儲存需求。
BLOB列被視為二進位制字串。TEXT列被視為字元字串,類似CHAR和BINARY。
- ENUM和SET
- size ENUM('x-small','small','medium','large','x-large')
- 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’都會在寫入後統一格式。