MySQL資料型別

2022-12-20 18:21:03 字數 5383 閱讀 8870

mysql的基本資料型別

檢視文章

mysql的基本資料型別2008-06-05 10:18

數值型別

mysql的數值資料型別可以大致劃分為兩個類別,乙個是整數,另乙個是浮點數或小數。mysql允許我們指定數值字段中的值是否有正負之分或者用零填補。表列出了各種數值型別以及它們的允許範圍和占用的記憶體空間。

型別tinyintsmallint

大小1位元組2位元組

範圍(有符號)範圍(無符號)用途(-128,127)(-32 768,32767)

(0,255)(0,65 535)

小整數值大整數值

mediumint3位元組int或integer

(-8 388 608,8大整

(0,16 777 215)

數值388 607)

(-2 147 483

(0,4 294 967大整

648,2 147 483

數值295)

647)

(-9 233 372

(0,18 446 744極大036 854 775

808,9 223 372073 709 551整數

值036 854 775615)

807)

(-3.402 823466 e+38,

0,(1.175 494

1.175 494 351

351 e-38,

e-38),0,(1.175

3.402 823 466

494 351 e-38,

e+38)

3.402 823 466351 e+38)

(1.797 693 1340,(2.225 073862 315 7858 507 201 4e+308,2.

225e-308,1.797073 858 507693 134 862201 4 e-308),315 7 e+308)

4位元組bigint8位元組

float4位元組

單精度浮點數值

double8位元組

雙精度浮點數值

0,(2.225 073858 507 201 4e-308,1.797693 134 862315 7 e+308)

對decimal(m,d),依賴於m和d的依賴於m和d的小數如果m>d,為m+2值值值否則為d+2

decimal

int型別

在mysql中支援的5個主要整數型別是tinyint,smallint,mediumint,int和bigint。這些型別在很大程度上是相同的,只有它們儲存的值的大小是不相同的。mysql以乙個可選的顯示寬度指示器的形式對sql標準進行擴充套件,這樣當從資料庫檢索乙個值時,可以把這個值加長到指定的長度。

例如,指定乙個欄位的型別為int(6),就可以保證所包含數字少於6個的值從資料庫中檢索出來時能夠自動地用空格填充。需要注意的是,使用乙個寬度指示器不會影響欄位的大小和它可以儲存的值的範圍。

萬一我們需要對乙個字段儲存乙個超出許可範圍的數字,mysql會根據允許範圍最接近它的一端截短後再進行儲存。還有乙個比較特別的地方是,mysql會在不合規定的值插入表前自動修改為0。

unsigned修飾符規定欄位只儲存正值。因為不需要儲存數字的正、負符號,可以在儲時節約乙個「位」的空間。從而增大這個字段可以儲存的值的範圍。

zerofill修飾符規定0(不是空格)可以用來真補輸出的值。使用這個修飾符可以阻止mysql資料庫儲存負值。

float、double和decimal型別

mysql支援的三個浮點型別是float、double和decimal型別。float數值型別用於表示單精度浮點數值,而double數值型別用於表示雙精度浮點數值。

與整數一樣,這些型別也帶有附加引數:乙個顯示寬度指示器和乙個小數點指示器。比如語句float(7,3)規定顯示的值不會超過7位數字,小數點後面帶有3位數字。

對於小數點後面的位數超過允許範圍的值,mysql會自動將它四捨五入為最接近它的值,再插入它。

decimal資料型別用於精度要求非常高的計算中,這種型別允許指定數值的精度和計數方法

作為選擇引數。精度在這裡指為這個值儲存的有效數字的總個數,而計數方法表示小數點後數字的位數。比如語句decimal(7,3)規定了儲存的值不會超過7位數字,並且小數點後不超過3位。

,計算方法設定為0。

unsigned和zerofill修飾符也可以被float、double和decimal資料型別使用。並且效果與int資料型別相同。

字串型別

mysql提供了8個基本的字串型別,可以儲存的範圍從簡單的乙個字元到巨大的文字塊或二進位制字串資料。

型別charvarchartinyblobtinytextblobtext

mediumblobmediumtextlogngbloblongtext

大小0-節0-節0-節0-節0-65 節0-65 節

用途定長字串變長字串

不超過255個字元的二進位制字串短文本字串

二進位制形式的長文字資料長文字資料

0-16 777

二進位制形式的中等長度文字資料

節0-16 777

中等長度文字資料

節0-4 294 967 295

二進位制形式的極大文字資料

位元組0-4 294 967 295

極大文字資料

位元組char和varchar型別

char型別用於定長字串,並且必須在圓括號內用乙個大小修飾符來定義。這個大小修飾符的範圍從0-255。比指定長度大的值將被截短,而比指定長度小的值將會用空格作填補。

char型別可以使用binary修飾符。當用於比較運算時,這個修飾符使char以二進位制方式參於運算,而不是以傳統的區分大小寫的方式。

char型別的乙個變體是varchar型別。它是一種可變長度的字串型別,並且也必須帶有乙個範圍在0-255之間的指示器。char和varchgar不同之處在於musql資料庫處理這個指示器的方式:

char把這個大小視為值的大小,不長度不足的情況下就用空格補足。而varchar型別把它視為最大值並且只使用儲存字串實際需要的長度(增加乙個額外位元組來儲存字串本身的長度)來儲存值。所以短於指示器長度的varchar型別不會被空格填補,但長於指示器的值仍然會被截短。

因為varchar型別可以根據實際內容動態改變儲存值的長度,所以在不能確定字段需要多少字元時使用varchar型別可以大大地節約磁碟空間、提高儲存效率。varchar型別在使用binary修飾符時與char型別完全相同。

text和blob型別

對於字段長度要求超過255個的情況下,mysql提供了text和blob兩種型別。根據儲存資料的大小,它們都有不同的子型別。這些大型的資料用於儲存文字塊或影象、聲音檔案等二進位制資料型別。

text和blob型別在分類和比較上存在區別。blob型別區分大小寫,而text不區分大小寫。大小修飾符不用於各種blob和text子型別。

比指定型別支援的最大範圍大的值將被自動截短。

日期和時間型別

在處理日期和時間型別的值時,mysql帶有5個不同的資料型別可供選擇。它們可以被分成簡單的日期、時間型別,和混合日期、時間型別。根據要求的精度,子型別在每個分型別中都可以使用,並且mysql帶有內建功能可以把多樣化的輸入格式變為乙個標準格式。

大小(字範圍節)331

型別datetimeyear

格式用途

1000-01-01/9999-12-31yyyy-mm-dd日期值'-838:59:59'/'838:59:59'hh:mm:ss1901/2155

1000-01-01

00:00:00/9999-12-3123:59:59

1970-01-01

00:00:00/2023年某時

yyyy

時間值或持續時間年份值

datetime8

yyyy-mm-dd混合日期和hh:mm:ss時間值yyyymmddhhmmss

混合日期和時間值,時

timestamp8

間戳date、time和tear型別

mysql用date和tear型別儲存簡單的日期值,使用time型別儲存時間值。這些型別可以描述為字串或不帶分隔符的整數序列。如果描述為字串,date型別的值應該使用連字型大小作為分隔符分開,而time型別的值應該使用冒號作為分隔符分開。

需要注意的是,沒有冒號分隔符的time型別值,將會被mysql理解為持續的時間,而不是時間戳。

mysql還對日期的年份中的兩個數字的值,或是sql語句中為tear型別輸入的兩個數字進行最大限度的通譯。因為所有tear型別的值必須用4個數字儲存。mysql試圖將2個數字的年份轉換為4個數字的值。

把在00-69範圍內的值轉換到2000-2069範圍內。把70-99範圍內的值轉換到1970-1979之內。如果mysql自動轉換後的值並不符合我們的需要,請輸入4個數字表示的年份。

dateyime和timestamp型別

除了日期和時間資料型別,mysql還支援dateyime和timestamp這兩種混合型別。它們可以把日期和時間作為單個的值進行儲存。這兩種型別通常用於自動儲存包含當前日期和時間的時間戳,並可在需要執行大量資料庫事務和需要建立乙個除錯和審查用途的審計跟蹤的應用程式中發揮良好作用。

如果我們對timestamp型別的字段沒有明確賦值,或是被賦與了null值。mysql會自動使用系統當前的日期和時間來填充它。

復合型別

mysql還支援兩種復合資料型別enum和set,它們擴充套件了sql規範。雖然這些型別在技術上是字串型別,但是可以被視為不同的資料型別。乙個enum型別只允許從乙個集合中取得乙個值;而set型別允許從乙個集合中取得任意多個值。

enum型別

enum型別因為只允許在集合中取得乙個值,有點類似於單選項。在處理相互排拆的資料時容易讓人理解,比如人類的性別。enum型別字段可以從集合中取得乙個值或使用null值,除此之外的輸入將會使mysql在這個欄位中插入乙個空字串。

另外如果插入值的大小寫與集合中值的大小寫不匹配,mysql會自動使用插入值的大小寫轉換成與集合中大小寫一致的值。

enum型別在系統內部可以儲存為數字,並且從1開始用數字做索引。乙個enum型別最多可以包含65536個元素,其中乙個元素被mysql保留,用來儲存錯誤資訊,這個錯誤值用索引0或者乙個空字串表示。

mysql認為enum型別集合**現的值是合法輸入,除此之外其它任何輸入都將失敗。這說明通過搜尋包含空字串或對應數字索引為0的行就可以很容易地找到錯誤記錄的位置。

set型別

set型別與enum型別相似但不相同。set型別可以從預定義的集合中取得任意數量的值。。如果插入乙個即有合法的元素又有非法的元素的記錄,mysql將會保留合法的元素,除去非法的元素。

乙個set型別最多可以包含64項元素。在set元素中值被儲存為乙個分離的「位」序列,這些「位」表示與它相對應的元素。「位」是建立有序元素集合的一種簡單而有效的方式。

並且它還去除了重複的元素,所以set型別中不可能包含兩個相同的元素。

希望從set型別欄位中找出非法的記錄只需查詢包含空字串或二進位制值為0的行。

MySQL資料型別

mysql支援所有標準sql數值資料型別。這些型別包括嚴格數值資料型別 integer smallint decimal和numeric 以及近似數值資料型別 float real和double precision 關鍵字int是integer的同義詞,關鍵字dec是decimal的同義詞。bit資...

資料型別整合

oracle與db2資料型別的分類對應說明 number oracle中的number型別可以對應db2 400中的很多態別,這種對應關係要依賴於oracle中number將用於儲存何種型別的資料,是整型還是帶有小數字的實型資料,另外還要考慮型別所占用的儲存空間,例如 samllint佔2 byte...

Delphi資料型別列表

分類範圍 2147483648 21 integer 474836470 4294967295 128 127 32768 32767 2147483648 21 longint 47483647 263.2630 2550 65535 44位元組 備註有符號32位 cardinalshortint...