MySQL中存儲的數(shù)據(jù)類型大致可以分為五類:整數(shù)類型、浮點(diǎn)型類型、字符串類型、日期類型以及二進(jìn)制類型
整數(shù)類型
整數(shù)又需要分為非負(fù)整數(shù)和整數(shù),在MySQL中整數(shù)分為5個:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT 5類
數(shù)據(jù)類型 | 取值范圍 | 字節(jié) |
---|---|---|
TINYINT | 無符號:-27~27-1 、有符號:0~2^8-1 | 1 |
SMALLINT | 無符號:-215~215-1 、有符號:0~2^16-1 | 2 |
MEDIUMINT | 無符號:-223~223-1 、有符號:0~2^24-1 | 3 |
INT | 無符號:-231~231-1 、有符號:0~2^32-1 | 4 |
BIGINT | 無符號:-263~263-1 、有符號:0~2^64-1 | 8 |
當(dāng)你創(chuàng)建好數(shù)據(jù)庫后,如果字段設(shè)置的值大于其類型的取值范圍,MySQL出現(xiàn)如下錯誤
ERROR 1264 (22003): Out of range value for column ......
浮點(diǎn)類型
浮點(diǎn)數(shù)類型主要分為三類:FLOAT[(M,D)]、DOUBLE[(M,D)]、DECIMAL[(M,D)]。FLOAT和DOUBLE都是浮點(diǎn)數(shù)類型,存儲時受到硬件控制,保存的不是精確值。而DECIMAL,內(nèi)部是以字符串的形式存儲。
字符串類型
字符串類型的類型有很多:包含CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、ENUM和SET。
- CHAR是定長字符串,如果設(shè)置字符串沒有達(dá)到指定長度會以空格補(bǔ)齊到指定長度,若沒有指定字符串長度,那么默認(rèn)為1。你可能要問了,如果用空格補(bǔ)齊,那么取出來的字符串不就不一樣了嗎?CHAR類型的數(shù)據(jù)取出來的時候會自動去掉空格,當(dāng)然如果PAD_CHAR_TO_FULL_LENGTH如果設(shè)置為True的話,那就不會了。最大存儲長度是255個字符
- VARCHAR是變長字符串,存儲的時候按照字符串的長度計算存儲空間,這樣就節(jié)省了存儲空間大小,但是這樣在插入的時候就會比定長耗時。
- TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT,這四種類型都是變長字符串,與VARCHAR有類似之處,但是這四種類型都無需指定最大字符串長度,也就是在數(shù)據(jù)存入之前,數(shù)據(jù)庫需開辟最大長度的空間,然后根據(jù)字符串長度進(jìn)行存儲。這就使得其效率比CHAR和VARCHAR更低。一般來說不建議使用。
效率
CHAR > VARCHAR > TEXT類 - ENUM是枚舉類型,也就是設(shè)置值只能是ENUM中的一種或者是NULL和'',否則會出錯。最大能設(shè)置65535個值。ENUM中每個成員都有一個索引值,從1開始編號。可以通過索引值來進(jìn)行操作。
- SET是集合類型,與ENUM類似,但是其可以進(jìn)行多選。最多只能設(shè)置64個值。
日期類型
日期類型都是代表日期的,也有很多類型:TIME、DATE、DATETIME、TIMESTAMP、YEAR五種。
- TIME 是時分秒的組合,但是這里的小時位置還包含了天數(shù),方便計算時間,所以TIME的范圍是-838:59.59~838.59.59,占3個字節(jié)
- DATE相同的,DATE是年月日組合,范圍是1000.01.01~9999.12.31,也占3個字節(jié)
- DATETIME 是一個完整的時間,時間從1000.01.01 00:00:00 ~9999.12.31 23:59:59,占8個字節(jié)
- TIMESTAMP 是時間戳,注意時間戳?xí)驗椴僮飨到y(tǒng)的不同而稍微有些不同,占4個字節(jié)
- YEAR 是年份,從1901~2155,占用1個字節(jié),如果只存儲年份的話,首選這個字段。
二進(jìn)制類型
雖說MySql有二進(jìn)制類型,但是一般不常用,如果要存儲圖片、音頻、視頻、文件的時候,一般存儲其所在路徑即可。
MySql的數(shù)據(jù)類型就這些了。