MySQL學習筆記 資料型別

2021-08-30 04:53:56 字數 4236 閱讀 6062

方括號中的屬性可以在ddl語句中控制column的詳細屬性

一、整數型

1.int[(width)][unsigned][zerofill]

mysql用4 bytes儲存int型資料,其值在-2,147,483,648到2,147,483,647之間,如果選擇了unsigned型別,那麼值在0到4,294,967,295。int和integer可以互換。(width)指定了數字的位數,如果實際的值超出了這個位數,那麼(width)會被忽略。如果是unsigend,通過指定zerofill會由0在左側佔位補足

2.boolean

也可以寫為bool或bit,需要1個byte空間,用來儲存boolean value,false(zero)或者true(nonzero),等價於tinyint(1)

3.tinyint[(width)][unsigned][zerofill]

需要乙個byte空間,值的範圍在-127到128或0到255

4.smallint[(width)][unsigned][zerofill]

需要2bytes空間,值的範圍在-32768到32767或者0到65535

5.mediumint[(width)][unsigned][zerofill]

需要3個byte,範圍在-8,388608到8,388,607或者0到16,777,215

6.bigint[(width)][unsigned][zerofill]

需要8個byte,範圍在-9,223,372,036,854,775,808到9,223,372,036,854,775,807或0到18,446,744,073,709,551,615

二、浮點數型

1.decimal[(width[,decimals])][unsigned][zerofill]

也可以使用關鍵字dec,numeric,fixed。在5.0.3版本以前,是作為string來儲存的。從5.0.3版本以後,採用二進位制儲存,對每9位數字用4bytes儲存。和int不同,decimal能儲存的值是由(width,decimal)來確定的,超過的值會儲存為指定範圍內最接近的值。在5.0.3版本以前,正數的儲存範圍還可以比指定的範圍在整數部分多1位

2.float[(width,decimals)][unsigned][zerofill] or float[(precision)][unsigned][zerofill]

預設的,float是乙個4byte的單精度浮點值。當precision在0到24之間時,float就採用預設形式,當precision在25到53之間時,相當於double。width不影響資料儲存,只影響顯示

3.double[(width,decimals)][unsigned][zerofill]

預設為8byte雙精度浮點值,width同樣只影響顯示。也可以寫為real或double precision

三、時間和日期

1.date

儲存和顯示的範圍在1000-01-01到9999-12-31之間,mysql始終以yyyy-mm-dd的格式顯示資料

輸入可以採用以下格式

(1)yyyy-mm-dd or yy-mm-dd

如果以yy輸入,70-99被解釋為1970-1999,00-69被解釋為2000-2069

(2)yyyy/mm/dd, yyyy:mm:dd, yy/mm/dd

可以使用任何標點(punctuation characters)作為分割符

(3)yyyy-m-d, yyyy-mm-d, or yyyy-m-dd

(4)yyyymmdd or yymmdd

如果輸入的日期超出了範圍,mysql會儲存為0000-00-00(zero date)。另外,從5.0.2版本開始,對無效日期,也會儲存為zero date

2.time

儲存的範圍在-838:59:59到838:59:59,即34天,22小時,59分,59秒。如果輸入值超出了範圍,會被儲存為最接近的值。如果在某個部分無效,會被儲存為00:00:00

輸入可以用以下格式

(1)dd hh:mm:ss, hh:mm:ss; dd hh:mm, hh:mm; dd hh; ss

(2)h:m:s, 可以為1-3位數字

(3)hhmmss, mmss, ss

3.timestamp

以yyyy-mm-dd hh:mm:ss的格式儲存和顯示乙個日期-時間對。儲存的範圍從1970-01-01 00:00:00到2023年的某個時間。但這個型別具體的含義在mysql的各個版本中都略有不同。timestamp可以在insert或update表時,被一同自動更新為當前時間。但對每張表,只有乙個timestamp是可以自動更新的。如果有多個timestamp型的column,需要將其他的column置乙個constant default(such as default 0)。如果要在insert時自動設定,需要在建表時指定為default current_timestamp,如果需要在update時也自動更新,需要在建表時指定為on update current_timestamp。如果兩者都要,則都要指定。

default null對錶中的第乙個timestamp,會被解釋為default current_timestamp,對後面的timestamp, 會被解釋為default 0。

輸入可以採用以下格式

(1)yyyy-mm-dd hh:mm:ss or yy-mm-dd hh:mm:ss,可以採用其他標點作分隔符

(2)yyyymmddhhmmss or yymmddhhmmss

4.year[(digits)]

需要1個byte,digits可以為2或4,預設為4。2digits儲存的範圍為70到69,即1970-2069;4digits儲存的範圍1901-2155,也包括0000,無效值都會被轉化為0000

5.datetime

也是時間-日期對,同timestamp相比只是沒有了自動更新的特性。範圍從1000-01-01 00:00:00到9999-12-31 23:59:59。如果用乙個date賦值,time部分會被設為00:00:00;如果用乙個time賦值,date部分會被設為0000-00-00。輸入可以採用的形式與timestamp相同

四、字元

1.char[(width)]

width預設為1,最大值為255,超過255會被轉化為最小的text。可以定義char(0),只能包含null或者""(empty string)兩種值,它只需要乙個bit來儲存。另外,字串中的trailing spaces都會被忽略掉。

2.varchar[(width)]

變長字串,width最大為65,535,在5.0.3版本前為255。另外需要1到2個byte來儲存字串長度。超過長度限制會被轉為最小的text。在儲存是trailing spaces同樣會被去掉

3.binary(width) and varbinary(width)

與char或varchar等效,只不過是以二進位制儲存。從4.1.2版本引入,在4.1.2以前版本,可以通過在char或varchar後面指定binary關鍵字獲得這一特性

4.blob

以二進位制形式儲存大型資料,最大長度為65535bytes。對字串不會去除trailing spaces,不允許default clause

5.text

儲存大型string,最大長度也是65535bytes。同blob相比,text有字符集屬性,排序是大小寫無關的

6.tinyblob and tinytext

最大長度255bytes的blob和text

7.mediumblob and mediumtext

16,777,215bytes的blog和text

8.longblob and longtext

最大長度4gigabytes的blog和text,有效長度取決於server的記憶體配置等

9.enum('value1'[,'value2'[, ... 'valuen]])

string的列舉,最多包含65535個不同的列舉值。在輸入和顯示時都是string,但資料庫內部儲存實際是integer。另外,enum還可以包含null(stored as null)和empty string ''(stored as 0),其他有效的列舉值則為1,2,...n。通過宣告not null,是enum拒絕接受null。另外,無效的列舉值會被儲存為''

10.set('value1'[,'value2'[, ... 'valuen]])

輸入和顯示是string,資料庫內部同樣以integer儲存。最多儲存64個元素,無效的元素也會被儲存為''。set和enum的區別是enum只能儲存列舉值中的乙個,而set可以同時儲存多個元素

MySQL學習筆記 資料型別

一 資料型別 內容參考 sql學習指南 不完整 1 文字型別 文字型別 最大位元組數 tinytext 255text 65535 varchar 65536 mediumtext 16777215 longtext 4294967295 2 整數型別 型別帶符號的範圍 無符號的範圍 tinyint...

mysql 筆記 資料型別

serial serialis an alias forbigint unsigned not null auto increment unique.zerofill 如果指定numeric 列指定為 zerofill 自動為非符號列 if you specifyzerofillfor a nume...

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

mysql支援多種資料型別,主要有數值型別 日期 時間型別和字串型別。數值資料型別 包括整數型別tinyint smallint mediumint int bigint 浮點小數型別float的double 定點小數型別decimal。日期 時間型別 包括year time date dateti...