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 |
指定一個字元集 |