很多語言都有自己獨特的數據類型,但是它們也往往支持一些共同的數據類型,比如“字符串”、“整型”、“浮點型”、“布爾類型”,等等,雖然它們風格迥異,實現原理也不盡相同,但是究其根本原因,還是為了方便開發者的使用。
MySQL為了存儲數據的時候可以達到更高的效率,對數據類型的劃分可能和編程語言有較大區別,它更多的是用來確定存放使用的空間大小和類型。
不同版本的MySQL支持的數據類型也可能稍有不同,不過總的來說改動不大,可以使用命令“? data types”查看所有的數據類型,查看某一種數據類型用“? int”。
一、基本數據類型
整數類型(5種):存儲整數類型。
小數類型(3種):存儲小數類型數據。
字符類型(12種):存儲文本信息。
日期時間類型(5種):用于記錄時間。
數值類型:整數和浮點數類型,存儲實數的類型。
1、整數類型
這些數據類型主要區別是占空間的大小和存儲值的范圍不同。
類型 字節數 范圍 signed unsigned
bigint 8 -2^64~2^64-1 0~2*2^64-1
int 4 -2^32~2^32-1 0~2*2^32-1
mediumint 3 -2^24~2^24-1 0~2*2^24-1
smallint 2 -2^16~2^16-1 0~2*2^16-1
tinyint 1 -128~127 -2^8~2^8-1 0~2*2^8-1
定義語法:
id int(11) unsigned;
說明:11為寬度指示器,指的是長度,不是字符數,不是指存儲的長度為11位,所有的int類型存儲空間大小和值范圍是一樣的,11是在屏幕輸出的長度,如果存儲的真實數據不足11位,將補齊到11位,比如int(11)值為20,不足11位,前面將補充9個空格。
可以用zerofill修飾符固定用0而不是空格來填充到寬度指示器的寬度,使用了zerofill就意味著此時是unsigned的數據,因為負數前補0沒有意義。
若位數超過了寬度顯示器長度,不會截取,除非超出了數據類型的長度,沒有超過寬度顯示器長度會用0補充。
類型轉換:存儲“12.46”、“2016奧運會”等數據時候會進行截取和類型轉換(小數四舍五入),也會產生警告。
2、小數類型
浮點數是一個統稱,我們通常用浮點數表示小數,也可以用定點數表示小數。
所謂浮點數,它有自己的一套IEEE規范,比如Java采用的就是IEEE754標準,有些編程語言還分為單精度和雙精度,比如C語言,有些語言就只有浮點類型,比如PHP語言。
數據類型 字節 所屬類型
float 4 浮點數
double 8 浮點數
decimal(M,D) 由M和D共同決定 定點數
浮點類型也支持寬度指示器,比如float(M,D),M為顯示總位數,包括小數點(精度),D為小數點后位數(標度),小數點后不足D位,用00補齊,存儲超出范圍時會進行四舍五入或者存儲最接近的值。
浮點數存儲數據會存在一定的誤差,而這一點誤差往往可能會導致出現各種各樣的靈異事件,在精度要求比較高的應用中,我們更加建議使用定點數而不是浮點數來保存數據。
對于decimal(M,D)所占據的字節空間,如果M>D,就是M+2個字節,否則就是D+2,不過我們絕大多數都是要求M>D的,定點數不同于浮點數,定點數實際上是以字符串形式存放的,所以定點數可以更加精確的保存數據。
在默認的安全模式下,對于定點數,如果實際插入的數值精度大于實際定義的精度,MySQL會進行警告,但是數據依然按照實際精28/121度四舍五入后插入。如果SQL Mode是在嚴格模式下,系統會直接報錯,導致數據無法插入。
3、字符類型
MySQL提供了10個基本的字符串類型,可以存儲的范圍從一個簡單的字符到巨大的文本塊或者二進制字符串數據。
①、char
定長字符串,char(N),N是字符數而不是字節數,取值范圍為0~255字節,填充數據的時候,比指定長度大的值將會被截斷,比指定長度小的值默認用空格填充。
②、varchar
可變長字符串,varchar(N),N是字符數,取值范圍為0~65535字節。
③、
④、
⑤、
⑥、
4、日期時間類型
bigint 8
int 4
mediumint 3
smallint 2
tinyint 1
float(M,D)精度,標度 4
double(M,D) 8
decimal(M,D)
float/double 有精度損失
decimal 定點型,更精確數值型可選參數
unsigned
無符號,列的值從0開始,不為負。
zerofill
適用于學號、編碼等固定寬度的數字,可以填充至固定寬度。
自動加個unsigned。
2、字符串型
char
varchar
binary
varbinary
text
tinytext
text
mediumtext
longtext
blob
...?
3、日期時間型
二、復合數據類型