對于數(shù)據(jù)庫的整體優(yōu)化來說,正確定義表中的字段是非常關(guān)鍵的。應(yīng)該只采用字段》。如果事先知道只會用到2個字符的寬度,就不要把字段定義為10個字符寬。字段(或者說列)的類型也被稱為數(shù)據(jù)類型。
MySQL使用的多種數(shù)據(jù)類型可分為三類:數(shù)字、日期與時間,以及字符串類型。
數(shù)字類型
MySQL使用標(biāo)準(zhǔn)的 ANSI SQL 數(shù)字類型,所以如果你在學(xué)習(xí)MySQL之前,接觸過其他數(shù)據(jù)庫系統(tǒng),那么肯定對這些定義不會感到陌生。下面就列舉出常見的一些數(shù)字類型及其說明:
- INT 正常大小的整數(shù),可以有符號,也可以沒有符號。如果是有符號整數(shù),其允許的取值范圍是-2147483648~2147483647;無符號整數(shù)的取值范圍是從0至4294967295。最高可指定11位數(shù)字。
- TINYINT 非常小的整數(shù),分為有無符號兩種。前有符號時,其允許取值范圍是-128~127;無符號時的取值范圍為0~255。所以,最高可指定4位數(shù)字。
- SMALLINT 較小的整數(shù),分為有無符號兩種。前有符號時,其允許取值范圍是-32768~32767;無符號時的取值范圍為0~65535。所以最高可指定5位數(shù)字。
- MEDIUMINT 中型大小的整數(shù),分為有無符號兩種。前有符號時,其允許取值范圍是-8388608~8388607;無符號時的取值范圍為0~16777215。所以,最高可指定9位數(shù)字。
- BIGINT 較大型的整數(shù),分為有無符號兩種。前有符號時,其允許取值范圍為-9223372036854775808~9223372036854775807;無符號時的取值范圍為0~18446744073709551615。最高可指定20位數(shù)字。
- FLOAT(M,D) 不帶符號的浮點數(shù)。M 代表顯示長度,D 代表小數(shù)位數(shù)。這兩個參數(shù)都不是必需參數(shù),它們默認(rèn)為10, 2,表示小數(shù)點后有2位數(shù)字,而整個數(shù)字的位數(shù)為10(包含小數(shù)位數(shù))。FLOAT 類型的小數(shù)精度可以達(dá)到24位。
- DOUBLE(M,D) 不帶符號的雙精度浮點數(shù)。M 代表顯示長度,D 代表小數(shù)位數(shù)。這兩個參數(shù)都不是必需參數(shù),它們默認(rèn)為16, 4,表示小數(shù)點后有4位數(shù)字,而整個數(shù)字的位數(shù)為 16(包含小數(shù)位數(shù))。DOUBLE 類型的小數(shù)精度可以達(dá)到53位。DOUBLE 與 REAL 同義。
- DECIMAL(M,D) 非壓縮的無符號浮點數(shù)。 在未壓縮十進(jìn)制中,每一位十進(jìn)制數(shù)都對應(yīng)一個字節(jié)。需要定義顯示長度(M)和小數(shù)位數(shù)(D)。DECIMAL 與 NUMERIC 同義。
日期與時間類型
MySQL 包含以下幾種日期與時間類型:
- DATE YYYY-MM-DD (年-月-日)格式顯示的日期,取值范圍從1000-01-01 到 9999-12-31。比如1973年的12月30日就存為 1973-12-30。
- DATETIME 按照 YYYY-MM-DD HH:MM:SS 格式組合顯示的日期與時間,取值范圍從1000-01-01 00:00:00 到 9999-12-31 23:59:59。比如說1973年的12月30日下午3 : 30就存為1973-12-30 15 : 30 : 00。
- TIMESTAMP 介于1970年1月1日凌晨與2037年某個時間點之間的一種時間戳。這種格式與之前的 DATETIME 格式相仿,只不過少了數(shù)字間的連字符。1973年12月30日下午3 : 30被存為19731230153000(YYYYMMDDHHMMSS)。
- TIME 按照 HH:MM:SS 格式存儲的時間。
- YEAR(M) 用2位或4位格式存儲的時間。如果把長度定為2,比如說YEAR(2),那么可以表示從1970年到2069年的這些年份(70-69)。如果把長度定為4,YEAR(4),則可以表示從1901年到2155年。默認(rèn)長度為4。
字符串類型
雖然數(shù)字與日期類型都很有趣,但通常我們存儲最多的就是字符串了。下面列出了 MySQL 中常見的字符串類型。
- CHAR(M) 長度固定的字符串,長度范圍從1~255個字符,比如CHAR(5)。在存儲時,會向右用空格補齊指定長度。長度并非必須參數(shù),默認(rèn)長度為1。
- VARCHAR(M) 長度不定的字符串,長度范圍從1~255個字符。比如:CHAR(25)。在創(chuàng)建VARCHAR字段時,必須定義長度。
- BLOB or TEXT 最大長度為65535個字符的字段。BLOB是Binary Large Objects(二進(jìn)制大型對象)的縮寫,專用于保存大量的二進(jìn)制數(shù)據(jù),比如圖片或其他類型的文件。TEXT 類型的文件也能保存大型數(shù)據(jù)。這兩者的區(qū)別在于存儲數(shù)據(jù)的排序和對比方面,BLOB類型數(shù)據(jù)是大小寫敏感的,而TEXT類型數(shù)據(jù)則不是。另外,不能指定它們的長度。
- TINYBLOB or TINYTEXT 最大長度為255個字符的 BLOB 或 TEXT 字段。同樣也不能指定它們的長度。
- MEDIUMBLOB or MEDIUMTEXT 最大長度為16777215個字符的 BLOB 或 TEXT 字段。同樣也不能指定它們的長度。
- LONGBLOB or LONGTEXT 最大長度為4294967295個字符的 BLOB 或 TEXT 字段。同樣也不能指定它們的長度。
- ENUM 枚舉類型,是一種很獨特的列表類型。ENUM 類型的數(shù)據(jù)實際是一個包含多個固定值的列表,只能選擇這些值(包括 NULL 值)。例如,如果希望某個字段包含 "A"、"B" 和 "C",必須這樣定義:
ENUM ('A', 'B', 'C'),只有這些值(或 NULL 值)能夠填充到該字段中。