MySQL 5 6學習筆記(資料型別)

2021-09-06 12:39:32 字數 4210 閱讀 4462

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,...