https://blog.csdn.net/albertsh/article/details/94764106
支持類型
真是不查不知道,查詢后發現當前版本(5.7.21-log MySQL Community Server)支持的數據類型居然有40種,這還是超出我的想象的,以字典排序列舉在此方便查找:
bigint,binary,bit,blob,char,date,datetime,decimal,double,enum,float,geometry,geometrycollection,int,integer,json,linestring,longblob,longtext,mediumblob,mediumint,mediumtext,multilinestring,multipoint,multipolygon,numeric,point,polygon,real,set,smallint,text,time,timestamp,tinyblob,tinyint,tibytext,varbinary,varchar,year。
類型簡述
數字類型
- BIT[(M)]
比特值類型,M默認為1,范圍是[1,64]。
- TINYINT[(M)] [UNSIGNED] [ZEROFILL]
單字節整數,有符號時范圍是[-128,127],無符號時范圍是[0,255]。
- BOOL, BOOLEAN
布爾值類型,需要注意的是創建表時如果指定這兩種類型會被自動轉為TINYINT類型,0代表false,非0代表true。
- SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
兩字節整數,有符號時范圍是[-32768,32767],無符號時范圍是[0,65535]。
- MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
三字節整數,有符號時范圍是[-8388608,8388607],無符號時范圍是[0,16777215],這個類型在編程語言中很少見。
- INT[(M)] [UNSIGNED] [ZEROFILL]
四字節整數,有符號時范圍是[-2147483648,2147483647],無符號時范圍是[0,4294967295],與INTEGER等價。
- BIGINT[(M)] [UNSIGNED] [ZEROFILL]
八字節整數,有符號時范圍是[-9223372036854775808,9223372036854775807],無符號時范圍是[0, 18446744073709551615]。
- SERIAL
是BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE類型的別名,感覺可以直接拿來做主鍵。
- DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
用於存儲精確小數,M表示有效數字位數,范圍是[1,65],默認是10,D表示小數點后位數,范圍是[0,30],默認是0。
- NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL]
是DECIMAL的別名,同樣含義的還有DEC[(M[,D])] [UNSIGNED] [ZEROFILL]、FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]。
- FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
單精度浮點數,M表示有效數字位數,D表示小數點后位數,范圍有三部分[-3.402823466E+38,-1.175494351E-38],0,[1.175494351E-38,3.402823466E+38],該類型屬於Mysql自己的擴展,依賴硬件和操作系統,指定UNSIGNED表示禁用負數。
- FLOAT§ [UNSIGNED] [ZEROFILL]
單精度浮點數,p用來表示精度,取值為0-24等價於沒有M和D的FLOAT,取值為25-53等價於沒有M和D的DOUBLE。
- DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
雙精度浮點數,表示有效數字位數,D表示小數點后位數,范圍有三部分[-1.7976931348623157E+308,-2.2250738585072014E-308],0,[2.2250738585072014E-308, 1.7976931348623157E+308],該類型屬於Mysql自己的擴展,依賴硬件和操作系統,指定UNSIGNED表示禁用負數。等價於DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL]。
- REAL[(M,D)] [UNSIGNED] [ZEROFILL]
一般情況等價於DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL],但如果SQL mode指定了REAL_AS_FLOAT,那么它等價於FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]。
日期和時間類型
- DATE
日期類型,展示格式為’YYYY-MM-DD’,支持的范圍是[‘1000-01-01’ , ‘9999-12-31’]。
- DATETIME[(fsp)]
日期時間格式,展示格式為’YYYY-MM-DD hh:mm:ss[.fraction],支持范圍是[‘1000-01-01 00:00:00.000000’, ‘9999-12-31 23:59:59.999999’],fsp表示小數位數,默認是0,取值范圍是[0,6]。
- TIMESTAMP[(fsp)]
時間戳,范圍是[‘1970-01-01 00:00:01.000000’ UTC, ‘2038-01-19 03:14:07.999999’ UTC],注意到起始秒數從1開始,是因為0被保留用來代表’0000-00-00 00:00:00’了,fsp表示小數位數,默認是0,取值范圍是[0,6]。
- TIME[(fsp)]
時間類型,展示格式為 ‘hh:mm:ss[.fraction]’,支持的范圍是[’-838:59:59.000000’, ‘838:59:59.000000’],fsp表示小數位數,默認是0,取值范圍是[0,6]。
- YEAR[(4)]
代表年份類型,展示格式為’YYYY’,支持的范圍是[1901, 2155]和0000。
字符串類型
- [NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
- 固定長度的字符串,M表示字符串最大長度,范圍是(0,255],若實際長度不足M,實際串右側會填充空格,M默認為1。
- [NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]
- 可變長度的字符串,M表示字符串最大長度,范圍是(0, 65535],當存儲UTF8編碼中文時,一般需要3個字節存儲一個漢字。
- BINARY[(M)]
- 與CHAR類似,只是存儲的是二進制字節串而非普通的字符串。
- VARBINARY(M)]
- 與VARCHAR類似,只是存儲的是二進制字節串而非普通的字符串。
- TINYBLOB
- 字節串,最大長度是255。
- TINYTEXT [CHARACTER SET charset_name] [COLLATE collation_name]
- 字符串,最大長度是255。
- BLOB[(M)]
- 字節串,最大長度64K-1,若指定M,則會創建一個能存儲M字節最小的BLOB類型,比如TINYBLOB。
- TEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
- 字符串,最大長度64K-1,若指定M,則會創建一個能存儲M字節最小的BLOB類型,比如TINYTEXT。
- MEDIUMBLOB
- 字節串,最大長度16M-1。
- MEDIUMTEXT [CHARACTER SET charset_name] [COLLATE collation_name]
- 字符串,最大長度16M-1。
- LONGBLOB
- 字節串,最大長度4G-1。
- LONGTEXT [CHARACTER SET charset_name] [COLLATE collation_name]
- 字符串,最大長度4G-1。
- ENUM(‘value1’,‘value2’,…) [CHARACTER SET charset_name] [COLLATE collation_name]
- 枚舉值,一個字符串代表一個值,內部通過整數實現,理論上最多可以有65535個不同的值,但實際上這個值小於3000。
- SET(‘value1’,‘value2’,…) [CHARACTER SET charset_name] [COLLATE collation_name]
- 集合,包含一組字符串,其內部還是呈現為一個整數,最大可以有64個不同的字符串對象。
特殊數據類型
- Mysql提供了GEOMETRY、POINT、LINESTRING、POLYGON等特殊類型來與OpenGIS類一一對應,用來存儲一些圖形數據,同時還有MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION可以表示這些集合,我感覺我是沒機會用這些了,用到了再展開說吧。
Json數據類型
- 自從Mysql5.7.8之后添加的一種類型,可以存儲{“k1”: “val”, “k2”: 110}形式的數據。
常用數據類型大小