MySQL中但數據類型主要分爲 數值類型、字符串類型、日期時間類型,隨着MySQL版本升級,每每會對一些數據類型進行優化。sql
數據類型 | 字節 | 有符號 | 無符號 |
---|---|---|---|
TINYINT | 1 | -128 ~ 127函數 |
0 ~ 255性能 |
SMALLINT | 2 | -32768 ~ 32767 | 0 ~ 65535 |
MEDIUMINT | 3 | -8388608 ~ 8388607 | 0 ~ 16777215 |
INT | 4 | -2147483648 ~ 2147483647 | 0 ~ 4294967295 |
BITINT | 8 | -9233372036854775808 ~ 9223372036854775807 | 0 ~ 8446744073709551615 |
整型的數據類型能夠指定數值的寬度好比:優化
//默認的INT型 字寬爲11 INT(11) //指定寬度爲4的時候 若是配合ZEROFILL使用 若是不足4位將會在前面補0 INT(4)
默認狀況下若是沒有指定是否有符號則默認爲有符號(SIGNED),若是指定ZEROFILL會自動設置爲無符號(UNSIGNED)。編碼
整型能夠設置 AUTO_INCREMENT 屬性保持該字段能夠自動增加,該字段應該設置爲主鍵約束或增長惟一索引而且將其設置爲NOT NULL。spa
數據類型 | 字節 |
---|---|
float | 4 |
double | 8 |
浮點數能夠指定 整數位和小數位,例如:code
//若是沒有設置精度 則按真實數值進行存儲,若是指定精度則根據精度四捨五入 create table test( `float_def` float, `float_var` float(6, 2), `double_var` double(6, 2) )
數據類型 | 字節 |
---|---|
DECIMAL(M,D) | M+2 |
定點數也能夠指定精度,例如:索引
//若是沒有指定精度,默認定義爲:DECIMAL(10,0) //若是插入數值精度高於定義精度,則四捨五入同時出發一個Warning create table decTable ( dec_def decimal, dec_var decimal(5, 2) ) //好比以下方法插入,插入結果 dec_var = 4.57 insert into decTable values(10, 4.567);
數據類型 | 字節 |
---|---|
BIT(M) | 1 - 8 |
bit型以二進制位進行存儲 BIT(1)表示1位,最大支持64位也就是8個字節長度。ci
查看BIT類型的字段可使用 HEX函數 以十六進制的方式查看,或者BIN函數以二進制方式查看。字符串
數據類型 | 字節 | 最小值 | 最大值 |
---|---|---|---|
DATE | 4 | 1000-01-01 | 9999-12-31 |
DATETIME | 8 | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 |
TIME | 3 | -838:59:59 | 838:59:59 |
YEAR | 1 | 1901 | 2155 |
TIMESTAMP | 4 | 19700101080001 | 2038年 |
DATETIME 類型 爲 DATE 和 TIME 類型的結合。
任何YYYYMMDDHHMMSS類型的數據只要數值符合合法日期,均可以進行插入不管用什麼符號分隔。
TIMESTAMP 能夠增長 CURRENT_TIMESTAMP 爲默認值,當插入爲NULL的時候自動設置爲系統當前時間。
TIMESTAMP與時區相關,會根據MySQL設置的時區進行日期的轉換。
TIMESTAMP 與 DATETIME 的取值範圍也不一樣 TIMESTAMP 支持但範圍較小。
數據類型 | 描述 |
---|---|
CHAR(M) | M 爲 0 - 255 |
VARCHAR(M) | M 爲 0 - 65535,UTF8編碼 爲 0 - 65535/3 |
TINYBLOB | 0 - 255 |
MEDIUMBLOB | 0- 65535 |
BLOB | 0 - 167772150 |
LONGBLOB | 0 - 4294967295 |
TINYTEXT | 0 - 255 |
TEXT | 0 - 65535 |
MEDIUMTEXT | 0 - 167772150 |
LONGTEXT | 0 - 4294967295 |
VARBINARY(M) | 0 - M |
BINARY(M) | 0 - M |
首先以下例子:
//表示 長度爲4,若是插入小於4個字符的將在結尾進行空格補齊,並在查詢時去掉結尾空格 CHAR(4) //表示 最大長度爲4,若是插入小於4個字符,則長度爲插入的字符書,查詢時不會去掉結尾空格 VARCHAR(4)
其次,VARCHAR會根據字段的編碼類型決定其長度範圍。
MyISAM | InnoDB | Memory | |
---|---|---|---|
CHAR | 所有CHAR爲靜態表,效率高 | 浪費空間 | |
VARCHAR | 包含VARCHAR爲動態表,有碎片 | 節省空間,最小化IO | VARCHAR做爲CHAR處理 |
用於存儲大文本,TEXT保存字符串,BLOB保存二進制數據,頻繁刪改會致使空洞紀錄影響性能。
BINARY 與 VARBINARY的區別 與CHAR 與 VARCHAR的區別相同。
可是BINARY類型當插入長度小於定義長度會在結尾補齊0x00,這是與CHAR類型的一個區別
枚舉類型須要在定義的時候指定取值範圍,而且插入的內容必須在定義的範圍以內,不然會默認爲枚舉範圍的第一個。
枚舉類型 佔用 空間爲 1 - 2個字節,分別對應 0 - 255 和 0 - 65535個枚舉值的範圍。
SET類型與枚舉類型相似,都須要在定義字段的時候指定取值範圍,區別是SET類型能夠在插入的時候同時插入多個取值範圍內的值。
SET類型 佔用空間爲 1 - 8個字節,分別對應 0 - 64 位,其中每個二進制位表示一個成員值,也就是說最多能夠支持64個成員值。