MySQL使用了很多不同的數據類型,分解成三大類:數字,日期和時間,和字符串類型。
數字數據類型:
MySQL使用所有標准的ANSI SQL數值數據類型,所以如果與MySQL不同的數據庫系統這些定義會看起來也熟悉。下面的列表顯示了常見的數值數據類型和它們的說明。
INT - 一個正常大小可以有符號或無符號的整數。如果帶符號的,允許的范圍是-2147483648到2147483647。如果沒有符號,允許的范圍是從0到4294967295。可以指定一個寬度達11位數字。
TINYINT -一個非常小可以有符號或無符號的整數。如果帶符號的,允許的范圍是從-128到127。如果沒有符號,允許的范圍是從0到255。可以指定一個4位數字的寬度。
SMALLINT - 一個小可以有符號或無符號的整數。如果帶符號的,允許的范圍是從-32768到32767。如果沒有符號,允許的范圍是從0到65535。可以指定一個寬度為5位數字。
MEDIUMINT - 一個中等大小的,可以有符號或無符號的整數。如果帶符號的,允許的范圍是-8388608到8388607。如果沒有符號,允許的范圍是從0到16777215。可以指定一個寬度達9位數。
BIGINT - 一個大的,可以有符號或無符號的整數。如果帶符號的,允許的范圍是-9223372036854775808到9223372036854775807。如果沒有符號,允許的范圍是從0到18446744073709551615。可以指定一個寬度達11位數字。
FLOAT(M,D) - 一個浮點數字,不能是無符號的。可以定義的顯示長度(M)和小數(D)的數量。這不是必需的,將默認為10,2,其中2為小數位數和10是總人數的數字(包括小數)。小數精度可以到24位的持股量。
DOUBLE(M,D) -雙精度浮點數字,不能是無符號的。可以定義的顯示長度(M)和小數(D)的數量。這不是必需的,將默認為16.4,其中4個是小數位數。十進位至53位的雙精度可以去。 REAL是雙的代名詞。
DECIMAL(M,D) - 一個解包浮點數字,不能是無符號的。每個十進制在解壓縮小數,對應一個字節。定義的顯示長度(M)和小數點後的位數(D)是必需的。 NUMERIC是DECIMAL的代名詞。
日期和時間類型:
MySQL的日期和時間數據類型有:
DATE - 日期格式YYYY-MM-DD,1000-1-1和9999-12-31之間。例如1973年12月30日將存儲為1973-12-30日。
DATETIME - 日期和時間的組合YYYY-MM-DD HH:MM:SS格式,在1000-1-1 00:00:00和9999-12-31 23:59:59。例如,1973年12月30號15:30:00將存儲為1973-12-30 15:30:00.。
TIMESTAMP-1970年1月1日午夜,在2037年的某個時候之間的時間戳。這看起來像之前的DATETIME格式,不帶連字符之間的數字,1973年12月30日下午3:30將被存儲為19731230153000(YYYYMMDDHHMMSS)。
TIME - 存儲HH:MM:SS格式的時間。
YEAR(M) - 儲存年在2位或4位數字格式。如果長度指定為2(例如年(2)),年份可在1970到2069(70到69)。如果長度指定為4,年份可在1901到2155。默認長度為4。
字符串類型:
雖然數字和日期類型有些相似,將存儲的大部分數據將在字符串格式。下面列出了在MySQL中常用的字符串數據類型。
CHAR(M) - 一個固定長度的字符串的長度介於1到255個字符(例如CHAR(5)),向右填充到指定的長度與空間存儲。定義的長度不是必需的,但默認值是1。
VARCHAR(M) - 可變長度的字符串的長度介於1到255個字符,例如VARCHAR(25)。當創建一個VARCHAR字段必須定義一個長度。
BLOB 或 TEXT - 字段的最大長度為65535個字符。 BLOB是二進制大對象“,是用來存儲大量的二進制數據,如圖像或其他類型的文件。字段定義為文本也持有大量的數據,兩者之間的區別是存儲的數據進行排序和比較是區分大小寫的BLOB,並在文本字段不區分大小寫。不指定BLOB或TEXT的長度。
TINYBLOB 或 TINYTEXT -一個BLOB或TEXT列,最大長度為255個字符。不能指定TINYBLOB或TINYTEXT長度。
MEDIUMBLOB 或 MEDIUMTEXT -一個BLOB或TEXT列,最大長度為16777215個字符。不能指定MEDIUMBLOB或MEDIUMTEXT的長度。
LONGBLOB 或 LONGTEXT -一個BLOB或TEXT列,最大長度為4294967295個字符。不能指定LONGBLOB或LONGTEXT的長度。
ENUM - 枚舉,這是一種奇特的術語列表。當定義一個枚舉,要創建一個列表項目的值必須被選中(或它可以是NULL)。例如,如果希望字段包含“A”或“B”或“C”,則ENUM定義為ENUM('A','B','C'),只有那些值(NULL)所能填充該字段。
上面可能寫得看不清楚,下面補充一文章
1.整型(xxxint)
MySQL數據類型
含義
tinyint(m)
1個字節表示(-128~127)
smallint(m)
2個字節表示(-32768~32767)
mediumint(m)
3個字節表示(-8388608~8388607)
int(m)
4個字節表示(-2147483648~2147483647)
bigint(m)
8個字節表示(+-9.22*10的18次方)
2.浮點型(float和double)
MySQL數據類型
含義
float(m,d)
單精度浮點型,8位精度(4字節),m是十進制數字的總個數,d是小數點後面的數字個數
double(m,d)
雙精度浮點型,16位精度(8字節)
參數m只影響顯示效果,不影響精度,d卻不同,會影響到精度。比如設一個字段定義
3.定點數(decimal)
decimal(m,d) 定點類型浮點型在數據庫中存放的是近似值,而定點類型在數據庫中存放的是精確值。參數m是定點類型數字的最大個數(精度),范圍為0~65,d小數點右側數字的個數,范圍為0~30,但不得超過m。對定點數的計算能精確到65位數字。
4.字符串(char,varchar,xxxtext)
MySQL數據類型
含義
char(n)
固定長度的字符串,最多255個字符
varchar(n)
固定長度的字符串,最多65535個字符
tinytext
可變長度字符串,最多255個字符
text
可變長度字符串,最多65535個字符
mediumtext
可變長度字符串,最多2的24次方-1個字符
longtext
可變長度字符串,最多2的32次方-1個字符
5.二進制數據(xxxBlob)
XXXBLOB和xxxtext是對應的,不過存儲方式不同,xxxTEXT是以文本方式存儲的,如果存儲英文的話區分大小寫,而xxxBlob是以二進制方式存儲的,不區分大小寫。xxxBlob存儲的數據只能整體讀出。xxxTEXT可以指定字符集,xxxblob不用指定字符集。
6.日期時間類型(date,time,datetime,timestamp)
MySQL數據類型
含義
date
日期'2008-12-2'
time
時間'12:25:36'
datetime
日期時間'2008-12-2 22:06:44'
timestamp
不固定
timestamp比較特殊,如果定義一個字段的類型為timestamp,這個字段的時間會在其他字段修改的時候自動刷新。所以這個數據類型的字段可以存放這條記錄最後被修改的時間,而不是真正來的存放時間。
7.數據類型的屬性
MySQL關鍵字
含義
NULL
數據列可包含NULL值
NOT NULL
數據列不允許包含NULL值
DEFAULT xxx
默認值,如果插入記錄的時候沒有指定值,將取這個默認值
PRIMARY KEY
主鍵
AUTO_INCREMENT
遞增,如果插入記錄的時候沒有指定值,則在上一條記錄的值上加1,僅適用於整數類型
UNSIGNED
無符號
CHARACTER SET name
指定一個字符集