MySQL中定義數(shù)據(jù)字段的類型對(duì)數(shù)據(jù)庫的優(yōu)化非常重要
MySQL支持多種類型,大致可分為數(shù)值、日期/時(shí)間和字符串(字符)類型。
? ? ? ?數(shù)值:
1.整數(shù)(TINYINT SMALLINT MEDIUMINT INT BIGINT)
tinyint[(m)] [unsigned] [zerofill](小整數(shù),用于保存一定范圍內(nèi)的整數(shù))
有符號(hào):-127~128 ?
? ? ? ? 無符號(hào):0~255
int[(m)][unsigned][zerofill](整數(shù),用于保存一定范圍內(nèi)的整數(shù))
有符號(hào):-2147483648 ~ 2147483647
無符號(hào):0 ~ 4294967295
bigint[(m)][unsigned][zerofill](大整數(shù),用于保存一定范圍內(nèi)的整數(shù))
有符號(hào):(-9233372036854775808,9223372036854775807)
2.小數(shù)類型
? ? 日期:(DATETIME、DATE、TIMESTAMP、TIME和YEAR)
每個(gè)時(shí)間類型有一個(gè)有效值范圍和一個(gè)"零"值,當(dāng)指定不合法的MySQL不能表示的值時(shí)使用"零"值。
在實(shí)際應(yīng)用的很多場(chǎng)景中,MySQL的這兩種日期類型都能夠滿足我們的需要,存儲(chǔ)精度都為秒,但在某些情況下,會(huì)展現(xiàn)出他們各自的優(yōu)劣。下面就來總結(jié)一下兩種日期類型的區(qū)別。1.DATETIME的日期范圍是1001——9999年,TIMESTAMP的時(shí)間范圍是1970——2038年。2.DATETIME存儲(chǔ)時(shí)間與時(shí)區(qū)無關(guān),TIMESTAMP存儲(chǔ)時(shí)間與時(shí)區(qū)有關(guān),顯示的值也依賴于時(shí)區(qū)。在mysql服務(wù)器,操作系統(tǒng)以及客戶端連接都有時(shí)區(qū)的設(shè)置。3.DATETIME使用8字節(jié)的存儲(chǔ)空間,TIMESTAMP的存儲(chǔ)空間為4字節(jié)。因此,TIMESTAMP比DATETIME的空間利用率更高。4.DATETIME的默認(rèn)值為null;TIMESTAMP的字段默認(rèn)不為空(not null),默認(rèn)值為當(dāng)前時(shí)間(CURRENT_TIMESTAMP),如果不做特殊處理,并且update語句中沒有指定該列的更新值,則默認(rèn)更新為當(dāng)前時(shí)間。
datetime與timestamp的區(qū)別
字符串
注意:
1. 單獨(dú)插入時(shí)間時(shí),需要以字符串的形式,按照對(duì)應(yīng)的格式插入2. 插入年份時(shí),盡量使用4位值3. 插入兩位年份時(shí),<=69,以20開頭,比如50,? 結(jié)果2050? ? ?
? ? ? ? ? ? ? ? >=70,以19開頭,比如71,結(jié)果1971
MariaDB [db1]> create table t12(y year);
MariaDB [db1]> insert into t12 values?
? ? -> (50),
? ? -> (71);
MariaDB [db1]> select *from t12;+------+| y? ? |+------+| 2050 || 1971 |+------+
枚舉類型與集合類型
字段的值只能在給定范圍中選擇,如單選框,多選框
enum 單選只能在給定的范圍內(nèi)選一個(gè)值,如性別 sex 男male/女female
set 多選 在給定的范圍內(nèi)可以選擇一個(gè)或一個(gè)以上的值(愛好1,愛好2,愛好3...)
#枚舉類型CREATE TABLE shirts (
? ? ? ? ? ? ? ? ? ? name VARCHAR(40),
? ? ? ? ? ? ? ? ? ? size ENUM('x-small','small','medium','large','x-large')
? ? ? ? ? ? ? ? );
? ? ? ? ? ? ? ? INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small');#集合類型CREATE TABLE myset (col SET('a','b','c','d'));
? ? ? ? ? ? ? ? INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');