6-1
MySQL常用資料類型一覽
一、參考手冊
http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/data-types.com.coder114.cn.html
二、數字類型
- 整數型:
Tinyint/ smallint/ mediumint/int/ bigint(M) unsigned zerofill
- 對於int型 : 占的位元組越多,存儲的範圍也越大。
- Tinyint 1個位元組 8個位元
-
可選參數:XXint(M) unsigned zerofill
例:age tinyint(4) unsigned,或 stunum smallint(6) zerofill
Unsigned:代表此列為無符號類型,會影響到列的存儲範圍(範圍從0開始)
(不加unsinged,則該列預設是有符號類型,範圍從負數開始)
- zerofill:代表0填充,即:如果該數字不足參數M位元,則自動補0,補夠M位。
- 如果沒有zerofill屬性,單獨的參數M,沒有任何意義.。
- 如果設置某列為zerofill,則該列已經預設為 unsigned,無符號類型。
- 小數型:
Float(M,D),DOUBLE(M),decimal(M,D)
- M代表總位數,而D代表小數位。(小數右邊的位數)
- 浮點數能存 ~ ,float M<=24, 佔4個位元組,double占8位元組。
- DECIMAL(M,D) ,是把整數部分,和小數部分,分開存儲的, 比float精確。
- 例:money float(10,2) 、amount decimal(10,2)
- 例:total double(20,2) 、amount2 decimal(20,2)
- float 最大的問題是有效位數只有7個,其他會亂塞值,所以只能用在精準度要求不高的地方,避免使用。
- double 適合一般般數理運算使用,可以存很大的數字,但有效位數約17個,mysql內建的數學函式也是以此型態作為運算基準。
- decimal 是精準數值,占用空間比較大,適合算和錢有關的,或是需要存較精準的數字。
三、文字類型
- CHAR(M) 固定長度字串:
- M 代表寬度,0<=M<=255之間。
- 例:Char(10) ,則能輸入10個字元。
- 如果實際存儲內容不足M個,則後面加空格補齊;取出來的時候,再把後面的空格去掉。所以,如果內容最後有空格,將會被清除。
- VARCHAR(M) 變動長度字串:
- M 代表寬度,0<=M<=65535之間。
- 例:Varchar(10) ,則能輸入10個字元。
- 實際存儲內容不足M個,以實際佔的字元為主,如果內容最後有空格,不會被清除。
- char(M),varchar(M)限制的是字元,不是位元組。
- 例:char(4),varchar(4) 比較英文及中文字。
- 差異:
- Text:文本類型,可以存比較大的文本段,搜索速度稍慢
- 如果不是特別大的內容,建議用char,varchar來代替。
- 不用加預設值 (加了也沒用)。
四、日期時間類型
- Date:日期
- 格式:1998-12-31
- 範圍:1000/01/01 ,9999/12/31
- Time 時間
- 格式:13:56:23
- 範圍: -838:59:59 -->838:59:59
- datetime時期時間
- 格式:1998-12-31 13:56:23
- 範圍:1000/01//01 00:00:00 ---> 9999:12:31 23:59:59
- timestamp 時間戳記
- 1970-01-01 00:00:00 到當前的秒數。
- 一般存註冊時間,商品發佈時間等,並不是用datetime存儲,而是用時間戳記。因為datetime雖然直觀,但計算不便。
五、列表整理
|
類型 |
bytes |
範圍
|
選項 |
數字類型 |
TINYINT(M) 非常小整數 |
1 |
-128到127,unsigned狀態則為0到255 |
unsigned、zerofill |
SMALLINT(M) 較小整數 |
2 |
-32768到32767,unsigned狀態則為0到65535 |
unsigned、zerofill |
MEDIUMINT(M) 中型整數 |
3 |
-8388608到8388607,unsigned狀態則為0到16777215 |
unsigned、zerofill |
INT(M) 標準整數 |
4 |
-2147483648到2147483647unsigned狀態則為0到4294967295 |
unsigned、zerofill |
BIGINT(M) 大整數 |
8 |
-9223372036854775808到9223372036854775807unsigned狀態則為0到18446744073709551615 |
unsigned、zerofill |
FLOAT(M) 單精確度浮點數 |
4 |
FLOAT(M,D)最小非零值:±1.175494351E - 38FLOAT(4)最大非零值:±3.402823466E + 38FLOAT(8)最大非零值:±1.7976931348623157E + 308 |
zerofill |
DOUBLE(M) 雙精確度浮點數 |
8 |
最小非零值:±2.2250738585072014E - 308 |
zerofill |
DECIMAL(M,D) |
M |
可變;其值的範圍依賴於M和D |
zerofill |
日期類型 |
DATE 日期 |
3 |
1000-01-01到9999-12-31 |
|
DATETIME 日期時間 |
8 |
1000-01-01 00:00:00到9999-12-31 23:59:59 |
|
TIMESTAMP(M) 時間戳記 |
2,4,6,8,10,12,14 (左) |
1970-01-01 00:00:00到2037 |
|
TIME 時間 |
3 |
-838:59:59到838:59:59 |
|
YEAR 年度 |
1 |
1901到2155 |
|
文字類型 |
CHAR(M) 固定長度字串 |
M |
1<=M<=255 |
|
VARCHAR(M) 變動長度字串 |
M+1 |
1<=M<=65535 |
|
TINYTEXT非常小的文本串 |
M+1 |
255個字元 |
|
TEXT小文本串 |
M+2 |
65535個字元 |
|
MEDIUMTEXT中等文本串 |
M+3 |
16777215個字元 |
|
LONGTEXT大文本串 |
M+4 |
4294967295個字元 |
|
TINYBLOB超小型BLOB |
M+1 |
255個字元 |
|
BLOB小型BLOB |
M+2 |
65535個字元 |
|
MEDIUMBLOB中型BLOB |
M+3 |
16777215個字元 |
|
LONGBLOB大型BLOB |
M+4 |
4294967295個字元 |
|
特殊 |
ENUM 單選選項 |
1或2 |
最多65535個選項 |
|
SET 複選選項 |
1,2,3,4,8 |
最多64個選項 |
|