MySQL中存儲的數(shù)據(jù)類型大致可以分為五類:整數(shù)類型页徐、浮點型類型、字符串類型惕医、日期類型以及二進制類型
整數(shù)類型
整數(shù)又需要分為非負整數(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 |
當你創(chuàng)建好數(shù)據(jù)庫后,如果字段設置的值大于其類型的取值范圍吼和,MySQL出現(xiàn)如下錯誤
ERROR 1264 (22003): Out of range value for column ......
浮點類型
浮點數(shù)類型主要分為三類:FLOAT[(M,D)]涨薪、DOUBLE[(M,D)]、DECIMAL[(M,D)]炫乓。FLOAT和DOUBLE都是浮點數(shù)類型刚夺,存儲時受到硬件控制,保存的不是精確值厢岂。而DECIMAL光督,內(nèi)部是以字符串的形式存儲。
字符串類型
字符串類型的類型有很多:包含CHAR塔粒、VARCHAR结借、TINYTEXT、TEXT卒茬、MEDIUMTEXT船老、LONGTEXT咖熟、ENUM和SET。
- CHAR是定長字符串柳畔,如果設置字符串沒有達到指定長度會以空格補齊到指定長度馍管,若沒有指定字符串長度,那么默認為1薪韩。你可能要問了确沸,如果用空格補齊,那么取出來的字符串不就不一樣了嗎俘陷?CHAR類型的數(shù)據(jù)取出來的時候會自動去掉空格罗捎,當然如果PAD_CHAR_TO_FULL_LENGTH如果設置為True的話,那就不會了拉盾。最大存儲長度是255個字符
- VARCHAR是變長字符串桨菜,存儲的時候按照字符串的長度計算存儲空間,這樣就節(jié)省了存儲空間大小捉偏,但是這樣在插入的時候就會比定長耗時倒得。
- TINYTEXT、TEXT夭禽、MEDIUMTEXT霞掺、LONGTEXT,這四種類型都是變長字符串讹躯,與VARCHAR有類似之處根悼,但是這四種類型都無需指定最大字符串長度,也就是在數(shù)據(jù)存入之前蜀撑,數(shù)據(jù)庫需開辟最大長度的空間,然后根據(jù)字符串長度進行存儲剩彬。這就使得其效率比CHAR和VARCHAR更低酷麦。一般來說不建議使用。
效率
CHAR > VARCHAR > TEXT類 - ENUM是枚舉類型喉恋,也就是設置值只能是ENUM中的一種或者是NULL和''沃饶,否則會出錯。最大能設置65535個值轻黑。ENUM中每個成員都有一個索引值糊肤,從1開始編號∶ケ桑可以通過索引值來進行操作馆揉。
- SET是集合類型,與ENUM類似抖拦,但是其可以進行多選升酣。最多只能設置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 是時間戳,注意時間戳會因為操作系統(tǒng)的不同而稍微有些不同肢执,占4個字節(jié)
- YEAR 是年份枉阵,從1901~2155,占用1個字節(jié)预茄,如果只存儲年份的話兴溜,首選這個字段。
二進制類型
雖說MySql有二進制類型耻陕,但是一般不常用拙徽,如果要存儲圖片、音頻诗宣、視頻膘怕、文件的時候,一般存儲其所在路徑即可召庞。
MySql的數(shù)據(jù)類型就這些了岛心。