6、mysql資料型別介紹
阿新 • • 發佈:2018-11-25
MySQL資料型別,可以被分為3類:數值型別、日期和時間型別以及字串(字元)型別
方括號(“[”和“]”)指出可選的型別修飾符的部分
M
指出最大的顯示尺寸。最大的合法的顯示尺寸是 255 。
D
適用於浮點型別並且指出跟隨在十進位制小數點後的數碼的數量。最大可能的值是30,但是應該不大於M-2。
UNSIGNED
為“無符號”的意思, 即為非負數。是MYSQL自定義的型別,非標準SQL。
unsigned 屬性只針對整型 ,用途:
整型欄位有個ZEROFILL屬性,在數字長度不夠的資料前面填充0,以達到設定的長度。M值只當屬性為ZEROFILL時,才有區別效果。
如表結構為id1 int(10) ,id2 int(5),對應資料為 第一行為(1,1),第二行為(1111111,1111111),當id1,id2欄位設定為ZEROFILL屬性時,顯示資料為第一行為(0000000001,00001),第二行為(0001111111,1111111),不夠的位數會以0補齊。
浮點型:
(M,D) 表示總共M位,D個小數位,D包含於M中。浮點型別不能是unsigned的。
對每種浮點型別,可指定一個最大的顯示尺寸M和小數位數D。M的值應該取1到255。D的值可為0到30,但是不應大於M-2。M和D對float和double都是可選的,但對於decimal是必須的,在選項M和D時,如果省略了它們,則使用預設值,如果D被省略,它被設定為0。如果M被省掉,它被設定為10。
DECIMAL 型別不同於FLOAT和DECIMAL,其中DECIMAL 實際是以串存放的。
DECIMAL 可能的最大取值範圍與DOUBLE 一樣,但是其有效的取值範圍由M 和D 的值決定。如果改變M 而固定D,則其取值範圍將隨M 的變大而變大。表2 - 7的前三行說明了這一點。如果固定M 而改變D,則其取值範圍將隨D 的變大而變小(但精度增加)。表2 - 7的後三行說明了這一點。
給定的DECIMAL 型別的取值範圍取決於MySQL資料型別的版本。對於MySQL3.23 以前的版本,DECIMAL(M, D) 列的每個值佔用M 位元組,而符號(如果需要)和小數點包括在M 位元組中。因此,型別為DECIMAL(5, 2) 的列,其取值範圍為-9.99 到9 9 . 9 9,因為它們覆蓋了所有可能的5 個字元的值。正如MySQL3.23 一樣,DECIMAL 值是根據ANSI 規範進行處理的, ANSI 規範規定DECIMAL(M, D) 必須能夠表示M 位數字及D 位小數的任何值。
例如,
DECIMAL(5, 2) 必須能夠表示從-999.99 到999.99 的所有值。而且必須儲存符號和小數點,因此自MySQL3.23以來DECIMAL 值佔M + 2 個位元組。對於DECIMAL(5, 2),“最長”的值(- 9 9 9 . 9 9)需要7個位元組。在正取值範圍的一端,不需要正號,因此MySQL資料型別利用它擴充了取值範圍,使其超過了ANSI 所規範所要求的取值範圍。如DECIMAL(5, 2) 的最大值為9 9 9 9 . 9 9,因為有7 個位元組可用。
簡而言之,在MySQL3.23 及以後的版本中,DECIMAL(M, D) 的取值範圍等於更早版本中的DECIMAL(M + 2, D) 的取值範圍。在MySQL資料型別的所有版本中,如果某個DECIMAL 列的D 為0,則不儲存小數點。這樣做的結果是擴充了列的取值範圍,因為過去用來儲存小數點的位元組現在可用來存放其他數字了。
- UNSIGNED 可用來約束資料的範圍,例如有些年齡這種值一般不能是負數,那麼就可以設定一個 UNSIGNED ,這樣可以不允許負數插入。
- 可以增加數值範圍(相當於把負數那部分加到正數上)。不過少用,不方便移植。
一、數值型別
整型:(1個位元組是8位) 在MySQL中建立整型欄位INT(或其它像tinyint)時,可以設定該欄位的位數。如int(11),int(5),如果不指定位數,INT型預設長度為11。欄位插入長度與int設定的M無關, 當插入長度大於設定的M時,欄位值不會被截斷,還是按照型別的實際精度進行儲存。資料型別 | 大小 | M (預設值) | 範圍(有符號) | 範圍(無符號) | 用途 |
tinyint [(M)] [UNSIGNED] [ZEROFILL] | 1位元組 | 4 | -128~127 (-27~27-1) | 0 ~ 255 (0 ~ 28-1) | 非常小整數值 |
smallint [(M)] [UNSIGNED] [ZEROFILL] | 2位元組 | 6 | -32768~32767(-215 ~ 215-1) | 0 ~ 65535 (0 ~ 216-1) | 較小整數 |
mediumint [(M)] [UNSIGNED] [ZEROFILL] | 3位元組 | 9 | -8388608 ~ 8388607 (-223 ~ 223-1) | 0 ~ 16777215 (0 ~ 224-1) | 中等大小整數 |
int [(M)] [UNSIGNED] [ZEROFILL] | 4位元組 | 11 | -2147483648 ~ 2147483647(-231 ~ 231-1) | 0 ~ 4294967295 (0 ~ 232-1) | 標準整數 |
integer [(M)] [UNSIGNED] [ZEROFILL] | 4位元組 | 11 | -2147483648 ~ 2147483647(-231 ~ 231-1) | 0 ~ 4294967295 (0 ~ 232-1) | 和int相同 |
bigint [(M)] [UNSIGNED] [ZEROFILL] | 8位元組 | 20 | -9223372036854775808 ~9223372036854775807 (-263 ~ 263-1) | 0 ~ 18446744073709551615 (0 ~ 264-1) | 較大整數 |
資料型別 | 大小 | 用途 |
float [(M,D)] [ZEROFILL] | 4位元組 | 單精度浮點型,8位精度;引數m隻影響顯示效果,不影響精度,d卻不同,會影響到精度;m是十進位制數字的總個數,d是小數點後面的數字個數 |
double[(M,D)] [ZEROFILL] | 8位元組 | 雙精度浮點型,16位精度;引數m隻影響顯示效果,不影響精度,d卻不同,會影響到精度 |
real[(M,D)] [ZEROFILL] | 8位元組 | 同double |
decimal[(M[,D])] [ZEROFILL] | 4位元組 | decimal(m,d) 定點型別浮點型在資料庫中存放的是近似值,而定點型別在資料庫中存放的是精確值。引數m是定點型別數字的最大個數(精 度),範圍為0~65,d小數點右側數字的個數,範圍為0~30,但不得超過m。對定點數的計算能精確到65位數字。 DECIMAL 資料型別用於精度要求非常高的計算中,這種型別允許指定數值的精度和計數方法作為選擇引數。精度在這裡指為這個值儲存的有效數字的總個數,而計數方法表示小數點後數字的位數。比如語句 DECIMAL(7,3) 規定了儲存的值不會超過 7 位數字,並且小數點後不超過 3 位 |
numeric[(M,D)] [ZEROFILL] | 4位元組 | 同decimal |
二、字元型別
對於可變長的字元型別,其值所佔的儲存量是不同的,這取決於實際存放在列中的值的長度,這個長度用L表示。資料型別 | 大小(範圍) | 用途 |
char(M)[BINARY] | M個位元組,0 <= M <= 255 (L為固定的 =255,不夠補空格) | 定長字串;CHAR 型別可以使用 BINARY 修飾符。當用於比較運算時,這個修飾符使 CHAR 以二進位制方式參於運算,而不是以傳統的區分大小寫的方式。CHAR值根據預設字符集以大小寫不區分的方式排序和比較,除非給出BINARY關鍵詞 |
varchar(M) [BINARY] | L+1個位元組,其中L <= M 且0 <= M <= 65535(MySQL5.0之前都是最大255) | 變長字串;VARCHAR 型別在使用 BINARY 修飾符時與 CHAR 型別完全相同 |
tinyblob,tinytext | L+1個位元組,其中L < 28-1 (255) | tinyblob:不超過 255 個字元的二進位制字串;tinytext:短文字字串 |
blob,text | L+2個位元組,其中L < 216-1(65535) | blob:二進位制形式的長文字資料,在分類和比較時BLOB 型別區分大小寫;text:長文字資料,在分類和比較時TEXT 不區分大小寫 |
mediumblob,mediumtext | L+3個位元組,其中L < 224-1 | mediumblob:二進位制形式的中等長度文字資料;mediumtext :中等長度文字資料, |
longblob,longtext | L+4個位元組,其中L < 232-1 | longblob:二進位制形式的極大文字資料 ;longtext :極大文字資料 |
enum('value1','value2',...) | 1或2個位元組,取決於列舉值的個數(最多65,535個值) | |
set('value1','value2',...) | 1、2、3、4或者8個位元組,取決於set成員的數目(最多64個成員) |
三、日期型別
MySQL 帶有 5 個不同的資料型別可供選擇。它們可以被分成簡單的日期、時間型別,和混合日期、時間型別。根據要求的精度,子型別在每個分型別中都可以使用,並且 MySQL 帶有內建功能可以把多樣化的輸入格式變為一個標準格式。型別 | 大小 | 範圍 | 格式 | 用途 |
YEAR[(2|4)] | 1位元組 | 1901/2155 | YYYY | 年份值 |
DATE | 3位元組 | '1000-01-01'--'9999-12-31' | YYYY-MM-DD | 日期值 |
TIME | 3位元組 | '-838:59:59'到'838:59:59' | HH:MM:SS | 時間值或持續時間 |
DATETIME | 8位元組 | '1000-01-01 00:00:00'--'9999-12-31 23:59:59' | YYYY-MM-DD HH:MM:SS | 混合日期和時間值 |
TIMESTAMP[(M)] | 8位元組 | 1970-01-01 00:00:00/2037 年某時 | YYYYMMDD HHMMSS | 混合日期和時間值,時間戳 |