mysql支援多種資料型別,主要有數值型別、日期/時間型別和字串型別。
數值資料型別:包括整數型別tinyint、smallint、mediumint、int、bigint、浮點小數型別float的double、定點小數型別decimal。
日期/時間型別:包括year、time、date、datetime和timestamp。
字串型別:包括char、varchar、binary、varbinary、blob、text、enum和set等。
1. 整數型別
型別名稱
儲存需求
取值範圍(有符號)
tinyint(m)
1個位元組
-128~127
smallint(m)
2個位元組
-32768~32767
mediumint(m)
3個位元組
-8388608~8388607
int(m)
4個位元組
-2147483648~2147483647
bigint(m)
8個位元組
-9223372036854775808~9223372036854775807
m表示該資料型別指定的顯示寬度,指定能夠顯示的數值中數字的個數。比如說,定義:year int(4),宣告乙個只顯示4位數字寬度表示年的字段。
顯示寬度和資料型別的取值範圍是無關的。
2. 浮點資料型別和定點數型別
mysql中使用浮點數和定點數來表示小數。它們都可以用(m,n)來表示,其中m稱為精度,表示總共的位數;n稱為標度,是表示小數的位數。
型別名稱
儲存需求
取值範圍(有符號)
float(m,d)
單精度浮點型,4位元組
-3.402823466e+38~
-1.175494351e-38
double(m,d)
雙精度浮點型,8位元組
-1.7976931348623157e+308
~-2.2250738585072014e-308
decimal(m,d),dec
壓縮的「嚴格」定點數,m+2個位元組
可能最大取值範圍與double一致
不論是定點還是浮點型別,如果使用者指定的精度超出精度範圍,則會四捨五入進行處理。
3. 日期時間型別
當只記錄年資訊的時候,可以只使用year型別,而沒必要使用date型別。當指定確實不合法的值時系統將「零」值插入到資料庫中。
型別名稱
日期格式
取值範圍
儲存需求
year
yyyy
1901~2155
1位元組
time
hh:mm:ss
-838:59:59~838:59:59
3位元組
date
yyyy-mm-dd
1000-01-01~9999-12-31
3位元組
datetime
yyyy-mm-dd hh:mm:ss
1000-01-01 00:00:00~9999-12-31 23:59:59
8位元組
timestamp
yyyy-mm-dd hh:mm:ss
1970-01-01 00:00:01~2038-01-19 03:14:07
4位元組time型別的取值範圍如此大的原因是time不僅可以表示一天的時間,還可以是乙個大的時間段。
timestamp值的儲存是以utc(世界標準時時間)格式儲存的,儲存時對當前時區進行轉換,檢索時再轉換為當前時區。即查詢時,根據當前時區的不同,顯示的時間值不不同的。
4. 字串
型別名稱
說明
儲存需求
char(m)
固定長度的字串
m位元組,1<=m<=255
varchar(m)
變長字串
l+1位元組,在此l<=m和1<=m<=255
tinytext
非常小的字串
l+1位元組,在此l<2^8
text
小的字串
l+2位元組,在此l<2^16
mediumtext
中等大小的字串
l+3位元組,在此l<2^24
longtext
大的字串
l+4位元組,在此l<2^32
enum
列舉型別,只能有乙個列舉字串值
1或2個位元組,取決於列舉值的數目(最大值65535)
set
乙個集合,字串物件可以有零個或多個set成員
1,2,3,4或8個位元組,取決於集合成員的數量(最多64個成員)
enum列總有乙個預設值。如果將enum列宣告為null,null值則為該列的乙個有效值,並且預設值為null。如果enum列被宣告為not null,其預設值為允許的值列表的第1個元素。
5. 二進位制型別
型別名稱
說明
儲存需求
bit(m)
位欄位型別
大約(m+7)/8個位元組
binary(m)
固定長度二進位制字串
m個位元組
varbinary(m)
可變長度二進位制字串
m+1個位元組
tinyblob(m)
非常小的blob
l+1位元組,在此l<2^8
blob(m)
小blob
l+2位元組,在此l<2^16
mediumblob(m)
中等大小的blob
l+3位元組,在此l<2^24
longblob(m)
非常大的blob
l+3位元組,在此l<2^32
blob列儲存的是二進位製大物件(位元組字串);text列儲存的是非二進位制字串(字元字串)。blob列沒有字符集,並且排序和比較基於值位元組的數值;text列有乙個字符集,並且根據字符集對值進行排序和比較。
6. 如何選擇資料型別
如果不需要小數部分,則使用整數來儲存資料;如果需要小數部分,則使用浮點數型別。其中浮點double精度比float要高。
浮點數float、double相對於定點數decimal的優勢是:在長度一定的情況上,浮點數能表示更大的資料範圍。但是由於浮點數容易產生誤差,因此在對精確度要求比較高時,建議使用decimal來儲存。
日期與時間的選擇要簡單,需要什麼型別就用什麼型別。需要記錄年份,就用year;需要記錄時間,就用time即可。不要擴大資料型別的範圍。
timestamp與datetime相比,還有乙個功能,在插入值時,如果沒有指定timestamp列的值,mysql會把timestamp設定為當前時間;另外,空間上timestamp也有優勢。
char和varchar的區別:char是固定長度,所以它的處理速度比varchar的速度要快,但浪費儲存空間。
enum和set:enum合法取值列表最多允許有65535個成員,非常適合「男」、「女」、「未知」這樣的取值。set最多可以取64個成員,空字串也是合法取值,記錄乙個人的愛好時,用set比較合適。
MySQL 5 6 資料型別
數值型別型別 說明大小 有符號範圍 無符號範圍 bit位欄位,1 64位 tinyint 整數值1位元組 128,127 0,255 smallint 整數值2位元組 32768,32767 0,65535 mediumint 整數值3位元組 8388608,8388607 0,16777215 i...
mysql5 6 資料型別
int 5 表示顯示寬度為5,預設為顯示寬度11.zerofill屬性 用0填充前面空位 auto increment屬性 只用於整數。一般從1開始,每行增加1.乙個表最多只能有乙個這樣的列。對於要使用auto increment的列應該定義為not null並定義為primary key或uniq...
MySQL學習筆記 資料型別
方括號中的屬性可以在ddl語句中控制column的詳細屬性 一 整數型 1.int width unsigned zerofill mysql用4 bytes儲存int型資料,其值在 2,147,483,648到2,147,483,647之間,如果選擇了unsigned型別,那麼值在0到4,294,...