數(shù)值類型
整數(shù)類型 | 字節(jié) | 最小值 | 最大值 |
---|---|---|---|
TINYINT | 1 | 有符號 <br />無符號 0 | 有符號 <br />無符號 |
SMALLINT | 2 | 有符號 <br />無符號 0 | 有符號 <br />無符號 |
MEDIUMINT | 3 | 有符號 <br />無符號 0 | 有符號 <br />無符號 |
INT、INTEGER | 4 | 有符號 <br />無符號 0 | 有符號 <br />無符號 |
BIGINT | 8 | 有符號 <br />無符號 0 | 有符號 <br />無符號 |
浮點數(shù)類型 | 字節(jié) | 最小值 | 最大值 |
---|---|---|---|
FLOAT | 4 | ||
DOUBLE | 8 |
定點數(shù)類型 | 字節(jié) | 描述 |
---|---|---|
DEC(M,D),<br />DECIMAL(M,D) | M+2 | 最大取值范圍與 DOUBLE 相同瘫怜,給定 DECIMAL 的有效取值范圍由M和D決定 |
整數(shù)類型
在整數(shù)類型中滨彻,按照取值范圍和存儲方式不同藕届,分為 tinyint 、smallint亭饵、mediumint休偶、int 和 bigint 這 5 個類型。如果超出類型范圍的操作辜羊,會發(fā)生 “Out of range” 錯誤提示
對于整型數(shù)據(jù)踏兜,MySQL 還支持在類型名稱后面的小括號內(nèi)指定顯示寬度,例如int(5)
表示當數(shù)值寬度小于 5 位的時候在數(shù)字前面填滿寬度八秃,如果不顯式指定寬度則默認為 int(11)
碱妆。如果配合 zerofil 使用時,數(shù)字位數(shù)不夠的空間用字符 0 填滿昔驱。
設(shè)置寬度后疹尾,如果插入大于寬度限制的值,不會對插入的數(shù)據(jù)有任何影響骤肛,還是按照類型的實際精度進行保存纳本,這時,寬度格式實際已經(jīng)沒有意義腋颠。
很多的整數(shù)類型都有一個可選屬性 UNSIGNED(無符號)繁成,如果需要在字段里面保存非負數(shù)或者需要較大的上限值時,可以用此選項淑玫,它的取值范圍是正常值的下限取 0朴艰,上限取原值的 2 倍。如果一個列指定為 zerofill混移,則 MySQL 自動為該列添加 UNSIGNED 屬性。
另外侮穿,整數(shù)類型還有一個屬性:AUTO_INCREMENT歌径。在需要產(chǎn)生唯一標識符或順序值時,可利用此屬性亲茅,這個屬性只用于整數(shù)類型回铛。值一般從 1 開始,每行增加 1克锣。一個表中最多只能有一個 AUTO_INCREMENT 列茵肃。對于任何想要使用 AUTO_INCREMENT 的列,應(yīng)該定義為 NOT NULL袭祟,并定義為 PRIMARY KEY 或者定義為 UNIQUE 鍵验残。
小數(shù)類型
小數(shù)類型分為兩種:浮點數(shù)和定點數(shù)。
浮點數(shù)包括 float(單精度)和 double(雙精度)巾乳,而定點數(shù)則只有 decimal 一種表示您没。
定點數(shù)在 MySQL 內(nèi)部以字符串形式存放鸟召,比浮點數(shù)更精確,適合用來表示貨幣等精度高的數(shù)據(jù)氨鹏。
浮點數(shù)和定點數(shù)都可以用類型名稱后加(M,D)的方式來進行表示欧募,表示該值一共 M 位數(shù)字(整數(shù)位+小數(shù)位),其實 D 表示小數(shù)位的長度仆抵,M 和 D 又稱為精度和標度跟继。在不指定精度時,默認會按照實際的精度(由實際的硬件和操作系統(tǒng)決定)來顯示镣丑,而 decimal 在不指定精度時舔糖,默認的整數(shù)位為 10,默認的小數(shù)位為 0传轰。需要注意的是剩盒,浮點數(shù)后面跟(M,D)的用法是非標準用法,如果要用于數(shù)據(jù)庫的遷移慨蛙,則最好不要這么使用辽聊。
MySQL 在保存值時,如果小數(shù)位長度超過 D 值期贫,當該列為浮點類型時跟匆,會進行四舍五入,如果是定點數(shù)時通砍,會將超出的丟掉玛臂。
日期時間類型
日期和時間類型 | 字節(jié) | 最小值 | 最大值 |
---|---|---|---|
DATE | 4 | 1000-01-01 | 9999-12-31 |
DATETIME | 8 | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 |
TIMESTAMP | 4 | 19700101080001 | 2038年的某個時刻 |
TIME | 3 | -839:59:59 | 839:59:59 |
YEAR | 1 | 1901 | 2155 |
TIMESTAMP 和 DATETIME 的區(qū)別:
- TIMESTAMP 支持的時間范圍較小,其取值范圍從 19700101080001 到 2038 年的某個時間封孙,因此不適合存放比較久遠的日期迹冤,而 DATETIME 是從 1000-01-01 00:00:00 到 9999-12-31 23:59:59,范圍更大虎忌。
- 表中的第一個 TIMESTAMP 列自動設(shè)置為系統(tǒng)時間泡徙。當插入的值超出取值范圍時,MySQL 認為該值溢出膜蠢,使用 0000-00-00 00:00:00 進行填補堪藐。
- TIMESTAMP 的插入和查詢都受到當?shù)貢r區(qū)的影響,更能反映出實際的日期挑围。DATETIME 只能反映出插入時當?shù)氐臅r區(qū)礁竞,其它時區(qū)的人查看數(shù)據(jù)必然會有誤差的。
字符串類型
字符串類型 | 字節(jié) | 描述及存儲需求 |
---|---|---|
CHAR(M) | M | M 為0~255之間的整數(shù) |
VARCHAR(M) | M 為0~65535之間的整數(shù)杉辙,值的長度+1個字節(jié) | |
TINYBLOB | 允許長度0~255字節(jié)模捂,值的長度+1個字節(jié) | |
BLOB | 允許長度0~65535字節(jié),值的長度+2個字節(jié) | |
MEDIUMBLOB | 允許長度0~167772150字節(jié),值的長度+3個字節(jié) | |
LONGBLOB | 允許長度0~4294967295字節(jié)枫绅,值的長度+4個字節(jié) | |
TINYTEXT | 允許長度0~255字節(jié)泉孩,值的長度+2個字節(jié) | |
TEXT | 允許長度0~65525字節(jié),值的長度+2個字節(jié) | |
MEDIUMTEXT | 允許長度0~167772159字節(jié)并淋,值的長度+3個字節(jié) | |
LONGTEXT | 允許長度0~4294967295字節(jié)寓搬,值的長度+4個字節(jié) | |
VARBINARY(M) | 允許長度0~M個字節(jié)的變長字節(jié)字符串,值的長度+1個字節(jié) | |
BINARY(M) | M | 允許長度0~M個字節(jié)的定長字節(jié)字符串 |
CHAR 和 VARCHAR 類型
- CHAR 列的長度固定為創(chuàng)建表時聲明的長度县耽,長度可以為從 0~255 的任何值句喷,存儲時,如果字符數(shù)沒有達到定義的位數(shù)兔毙,會在后面用空格補全入數(shù)據(jù)庫中唾琼;VARCHAR 列中的值可變長字符串,如果沒有達到定義的位數(shù)澎剥,也不會在后面補空格锡溯。
- 在獲取數(shù)據(jù)時,CHAR 列會把后面的空格全部丟棄掉哑姚;取 VARCHAR 數(shù)據(jù)時尾部空格會保留祭饭。