在創建數據表的時候,定義字段值的時候,最糾結的莫過于選擇哪個數據類型,char型還是varchar類型?確定類型后,又要糾結于給定多少長度呢?是(4)還是(50)? 存在這種問題莫過于對數據類型的一些特性還不了解,不能根據自己的需要選擇合適的數據類型和長度,這樣也能夠優化查詢,提高效率。
INTEGER、SMALLINT、DECIMAL、NUMERICAL、BIT、INT等
常用:int(4) 注意括號中的4和能表示的數值大小沒有關系,因為int這個類型就決定了它可以存儲的數值大小。4只是表示數值的位數。 默認情況下是int(11)。
浮點型:float、double 也可以表示為float(M,D)、double(M,D)
定點型:decimal、numberic 也可以表示為decimal(M,D); 其中M表示總的數值位數(整數部分+小數部分), D表示小數部分。例如: decimal(8, 2) 可以表示:999999.99
DATE: 只表示年月日,不包含時分秒 ,格式為YYYY-MM-DD
TIME: 只表示時分秒,格式為 HH:MM:SS
DATETIME: 表示一個完整的時間,格式為 YYYY-MM-DD HH:MM:SS
TIMESTAMP : 常用的時間戳,表示格式為00000000000000,如果需要經常計算時間或者返回當前時間,可以使用此類型。
YEAR: 只表示年份,格式為YYYY。
char 和 varchar 比較:
都表示較短的字符串,主要區別在于char是固定長度的,范圍在0-255, varchar是可變長度的,范圍在0-65535。 char(50),其中50表示50個字節數。比方說定義char(10)和varchar(10),插入“csdn”,那么char后面會補上6個空格,但是varchar會立馬變成4。 由于char是固定長度的,方便程序的查找和存儲,所以char類型的查詢更快,主要是以空間換時間。 對于char和varchar的選擇,根據數據量大小,以及對查詢效率的要求來進行選擇。一般如果長度變化不大,且查詢效率要求高的,一般使用char。但是MySQL的升級,對varchar的效率逐漸在優化,如果數據量很大的情況下,使用varchar至少可以減少存儲空間,較少讀取數據時的磁盤IO次數。
其他數據類型
enum: 顧名思義枚舉類型。最多65535個成員。
舉例:create table t (gender enum(‘M’,’F’)); 其中表示gender列是枚舉類型,范圍是M或者F。 在插入記錄的時候,只能選擇M或者F中一個,不區分大小寫,在數據庫中會統一轉成大寫,如果插入范圍之外的值,會拋出異常。可以在表中插入NULL,也可以插入枚舉值對應的元素順序,比方說第一個枚舉值對應1,如此下去。
SET: 也是一個集合。有多個元素,每次可以插入所有元素的若干子集。
TEXT: 只能保存字符數據(character),比方說:一篇文章或者日記等。
BLOB: 只能保存字節數據(byte)(二進制流),比方說圖片。
TEXT和BLOB類型的列創建索引,不能直接使用整列作為索引,因為這樣會讓索引占據很大的內存。對于TEXT和BLOB列都是使用前綴索引,也就是列的前N個字節作為所以。 create index indexalias on tablename(column(N));
注意:使用like查詢時候,%不要放置最前,這樣索引不會被使用。
新聞熱點
疑難解答