數實值型別
MySQL中包括嚴格資料類型(INTEGER,SAMLLINT,DECIMAL,NUMERIC),以及近似資料類型(FLOAT,REAL,DOUBLE),擴充後增加了TINYINT,MEDIUMINT和BIGINT這三種長度不同的整形,並增加了BIT類型,用來存放位元據。
在整數類型中,按照取值範圍和儲存方式不同,可以分為tinyint,smallint,mediumint,int和bigint這5個類型。對於整形資料,MySQL支援在類型名稱後面的小括弧內指定顯示寬度,例如int(5)表示當數值寬度小於5位的時候在數字前面填滿寬度,如果不顯示指定寬度則預設為int(11)。
zerofill是用‘0’填充的意思,在數字位元不夠的空間用字元‘0’填滿。
浮點數存在誤差問題;對貨幣等對精度敏感的資料,應該用定點數表示或儲存;在編程中,如果用到浮點數,要特別注意誤差問題,並盡量避免做浮點數比較;要注意浮點數中一些特殊值的處理。
日期時間類型
Mysql中有多種資料類型可以用於日期和時間的表示。
這些資料類型的主要區別如下:
(1)如果要用來表示年月日,通常用DATE來表示;
(2)如果要用來表示年月日時分秒,通常用DATETIME表示;
(3)如果只用來表示時分秒,通常用TIME來表示;
(4)如果需要進場插入或者更新日期為當前系統時間,則通常使用TIMESTAMP來表示。
(5)如果只是年份,可以使用YEAR來表示。
不同日期類型零值的表示如下所示:
資料類型 零值表示
DATETIME 0000-00-00 00:00:00
TIME 00:00:00
DATE 0000-00-00
TIMESTAMP 00000000000000
YEAR 0000
字串類型
CHAR和VARCHAR很類似,都用來儲存MySQL中較短的字串。二者的主要區別在於儲存方式的不同:CHAR列的長度固定為建立表時聲明的長度,長度可以是從0~255的任意值,而VARCHAR列中的值為可變長字串,長度可以指定為0~255之間的值。在檢索的時候,CHAR刪除了尾部的空格,而VARCHAR則保留了這些空格。
由於CHAR是固定長度的,所以它的處理速度比VARCHAR快得多,但是它的缺點是浪費儲存空間,程式需要對行尾空格進行處理,所以對於那些長度變化不大並且對查詢速度有較高要求的資料可以考慮使用CHAR類型。
如果需要儲存大文本時,一般使用TEXT或者BLOB,二者之間的區別主要是BLOB能用來儲存位元據,比如照片,而TEXT只能儲存字元資料,比如一篇文章或者日記。
大文字查詢可以使用合成索引。合成索引是根據大文字欄位的內容建立一個散列值,並把這個值儲存在單獨的資料列中,接下來就可以通過檢索散列值找到資料行了。對含有TEXT和BLOB欄位的表,如果經常做刪除和修改記錄的操作要定時執行OPTIMIZE TABLE功能對錶進行磁碟重組。
BINARY和VAEBINARY類似於CHAR和VAECHAR,不同的是它們包含了二進位字串。當儲存BINARY值時,在值的最後通過填充“0x00”以達到指定的欄位定義長度。
ENUM是枚舉類型,它的值範圍需要在建立表時通過枚舉方式顯示指定。但是ENUM只允許從值集合中選取單個值,而不能一次取多個值。
SET類型可以從允許值中選取任意1個或者多個元素進行組合。如果集合中包含重複的單元,那麼我們將會只取一次。
MySQL資料類型詳述
MySQL資料類型-decimal詳解
MySQL datetime資料類型設定目前時間為預設值
分析MySQL資料類型的長度