資料類型
數值類型 日期和時間類型 字元串類型

一、數值類型
整數
tinyint[M] [unsigned] [zerofill] // [ ] 表示可選,這裡的M表示顯示寬度,并不是取值範圍,顯示寬度不夠前面以0填充
bool是tinyint(1)的别名
浮點型
IEEE 754浮點數表示
S:符号位 E:指數位 M:尾數位,也叫有效數字位 N =(-1)^S * M * 2^E
單精度float 4個位元組 ,取值範圍-3.402823466E+38~3.402823466E+38, 精度大約7位
雙精度double 8個位元組,取值範圍 -1.7976931348623157E+308~1.7976931348623157E+308, 精度大約15位
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] // M總位數,D是小數點後面的位數,這裡是取值範圍
real是double的别名
定點型
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL] //M預設是10,D預設是0
decimal取值範圍與double是一樣的,但是有更高的精度。
decimal存儲方式,參考:http://dev.mysql.com/doc/refman/5.1/zh/precision-math.html
numeric是decimal的别名
二、字元串類型
char(M)
varchar(M) //這裡的M表示字元數
CHAR列的長度固定為建立表時聲明的長度。長度可以為從0到255的任何值。當儲存CHAR值時,在它們的右邊填充空格以達到指定的長度。當檢索到CHAR值時,尾部的空格被删除掉。在存儲或檢索過程中不進行大小寫轉換。
VARCHAR列中的值為可變長字元串。長度可以指定為0到65,535之間的值。VARCHAR的最大有效長度由最大行大小和使用的字元集确定。舉例來說,如果字元集為uft8,那麼一個字元需要3個位元組來存儲,則可以儲存的字元數為65535/3=21845,此外還需要一個字元的位置來存儲字元個數,故最大可填寫的字元數為21844。若是latin1,一個字元隻需1個位元組存儲,那麼可填寫的字元數為65532。
binary/varbinary
BINARY和VARBINARY 類似于CHAR和VARCHAR,不同的是它們包含二進制字元串。也就是說,它們包含位元組字元串而不是字元字元串。這說明它們沒有字元集,并且排序和比較基于列值位元組的數值。
字元串存儲需求
VARCHAR、BLOB和TEXT類是變長類型。每個類型的存儲需求取決于列值的實際長度(用前面的表中的L表示),而不是該類型的最大可能的大小。例如,VARCHAR(10)列可以容納最大長度為10的字元串。實際存儲需求是字元串(L)的長度,加上一個記錄字元串長度的位元組。對于字元串'abcd',L是4,存儲需要5個位元組。
對于CHAR、VARCHAR和TEXT類型,前面的表中的值L和M應解釋為字元數目,并且列定義中的這些類型的長度表示字元數目。例如,要想儲存一個TINYTEXT值需要L字元+ 1個位元組。
enum/set
枚舉/集合看過去像是字元串,實際上儲存的是整數。
三、日期和時間
日期和時間看起來像字元串,但是以整數來儲存的。
參考:
《資料庫系統概論》
mysql 5.1 參考手冊