MySQL資料型別 學習筆記

2021-09-22 14:04:06 字數 4737 閱讀 9397

一、整數型

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 資料型別(學習筆記)

mysql中定義資料欄位的型別對你資料庫的優化是非常重要的。mysql支援多種型別,大致可以分為三類 數值 日期 時間和字串 字元 型別。mysql支援所有標準sql數值資料型別。這些型別包括嚴格數值資料型別 integer smallint decimal和numeric 以及近似數值資料型別 f...

Python資料型別學習筆記

帶你走進資料型別 一 整數 浮點數 python中整數和浮點數的定義以及運算和c 都是一樣的,我在這裡就不需多說了,我就說明一點 python相對於c c 而言,定義整數沒有int 和 long long 這些區分的,直接賦值即可。這就體現出了python簡潔的功能。二 布林值 空值 首先我們先談談...

資料型別學習

public class demo02 新手 if flag 老手 less is more 要精簡易讀 型別轉換 低 高 byte,short,char int long float double int i 128 byte b byte i 記憶體溢位 double c i 強制轉換 型別 變...