ENUM是一個字符串對象,其值為表創建時在列規定中枚舉的一列值。語法格式如下:
字段名 ENUM(‘值1’,‘值2’...‘值n’)
字段名指將要定義的字段,值n指枚舉列表中的第n個值。ENUM類型的字段在取值時,只能在指定的枚舉列表中取值,而且一次只能取一個。如果創建的成員中有空格時,其尾部的空格將自動被刪除。ENUM值在內部用整數表示,每個枚舉值均有一個索引:列表值所允許的成員值從1開始編號,MySQL存儲的就是這個索引編號。枚舉最多可以有65535個元素。
例如:定義ENUM類型的列(‘first’,’second’,’third’),該列可以取的值和每個值的索引如下:
值
索引
NULL
NULL
“
0
first
1
second
2
third
3
EUNM值依照列索引順序排列,並且空字符串排在非空字符串的前面,NULL值排在其他所有的枚舉值前。
范例:
創建表emp10,定義INT類型的score字段,ENUM類型的字段level,列表值為(‘excellent’,’good’,’bad’),向表emp10中插入數據。
create table emp10(score INT,level enum('excellent','good','bad'));
insert into emp10 values (70,'good'),(90,1),(80,2),(50,3),(100,'best');
出現提示語:Data truncated for column 'level' at row 5
修改SQL如下:
insert into emp10 values (70,'good'),(90,1),(80,2),(50,3);
5、SET是一個字符串對象,可以有零或多個值。SET列最多可以有64個成員,其值為表創建時規定的一列值。指定包括多個SET成員的SET列值時,各個成員之間用逗號隔開。
語法格式如下:
SET(‘值1’,’值2’...’值n’)
SET值在內部用整數表示,列表中每一個值都有一個索引編號。當創建表時,SET成員的尾部空格將被自動還是拿出。但與ENUM類型不同的是,ENUM類型的字段只能從定義的列值中選擇一個值插入,而SET類型的列可以從定義的列值中選擇多個字符的聯合。
如果插入SET字段中列值有重復,MySQL將自動刪除重復的值;插入SET字段的值的順序不重要,MySQL會在存入數據庫時,按照定義的順序顯示;如果插入了不正確的值,默認會忽略這些值,並給出警告
范例
MySQL支持兩類字符型數據:文本字符串、二進制字符串。MySQL中的二進制數據類型有:BIT/BINARY/VARBINARY/TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
如果不需要小數部分,則使用整數來保存數據;如果需要表示小數,則使用浮點數類型。對於浮點數據列,存入的數值會對該列定義的小數進行四捨五入。
2、浮點數和
浮點數FLOAT,DOUBLE相對於定點數DECIMAL的優勢在於:在長度一定的情況下,浮點數能表示更大的數據范圍。但是由於浮點數容易產生誤差,因此對精度要求比較高時,簡易使用DECIMAL來存儲。DECIMAL在MySQL中是以字符串存儲的,用於定義貨幣等對精度要求較高的數據,在數據遷移中,float(M,D)是非標准SQL定義,數據庫遷移可能會出現問題。最好不要這樣使用。另外,兩個浮點數進行減法和比較運算時,容易出現問題。因此在進行計算的時候,一定要小心,如果進行數值比較,最好使用DECIMAL類型
3、日期與時間類型
MySQL對於不同種類的日期和時間有很多的數據類型。如果質押記住年份,則可以使用YEAR類型即可;如果只記錄時間,只需使用TIME類型
如果需要同時記錄日期和時間可以使用TIMESTAMP或者DATETIME類型。由於TIMESTAMP列的取值范圍小於DATETIME的取值范圍,因此存儲范圍較大的日期最好使用DATETIME
TIMESTAMP也有一個DATETIME不具備的屬性,默認情況下,當插入一條記錄但沒有指定TIMESTAMP列值時,MySQL會把TIMESTAMP列設為房前時間。
4、CHAR和VARCHAR之間的特點和選擇
區別:
CHAR是固定字符串,VARCHAR是可變長度字符串。CHAR會自動刪除插入數據的尾部空格,VARCHAR不會刪除尾部空格
CHAR是固定長度,所以處理速度比VARCHAR快。但其缺點是浪費存儲空間。
存儲引擎對於選擇CHAR和VARCHAR的影響:
對於MyISAM存儲引擎,只好使用固定長度的數據列代替可變長度的數據列。這樣可以是整個表靜態化,插敘更快
對於InnoDB存儲引擎,使用可變長度的數據列,因為InnoDB數據表的存儲格式不區分固定長度和可變長度,因此使用CHAR不一定比使用VARCHAR好。但是使用VARCHAR可以節省空間。
5、ENUM和SET
ENUM只能取單個值,他的數據列表是一個枚舉集合。因此要從多個值中選取一個時,可以使用ENUM。
SET可以取得多個值。在需要多個值的時候,時候使用SET類型
6、BLOB和TEXT
BLOB是二進制字符串,TEXT是非二進制字符串。兩者都可以存放大容量的信息。BLOB主要用於存儲圖片、音頻等,TEXT只能存放純文本文件。