mysql有哪些資料型別

2021-08-04 20:31:09 字數 7020 閱讀 7505

1樓:

在 mysql 中,有三種主要的型別:text(文字)、number(數字)和 date/time(日期/時間)型別。

text 型別:

number 型別:

-from 樹懶學堂

注意:以上的 size 代表的並不是儲存在資料庫中的具體的長度,如 int(4) 並不是只能儲存4個長度的數字。

實際上int(size)所佔多少儲存空間並無任何關係。int(3)、int(4)、int(8) 在磁碟上都是佔用 4 btyes 的儲存空間。就是在顯示給使用者的方式有點不同外,int(m) 跟 int 資料型別是相同的。

例如:1、int的值為10 (指定zerofill)

就是顯示的長度不一樣而已 都是佔用四個位元組的空間。

date 型別:

*即便 datetime 和 timestamp 返回相同的格式,它們的工作方式很不同。在 insert 或 update 查詢中,timestamp 自動把自身設定為當前的日期和時間。timestamp 也接受不同的格式,比如 yyyymmddhhmmss、yymmddhhmmss、yyyymmdd 或 yymmdd。

2樓:風若遠去何人留

一.數值型別

mysql支援所有標準sql中的數值型別,其中包括嚴格資料型別(integer,smallint,decimal,numberic),以及近似數值資料型別(float,real,double presision),並在此基礎上進行擴充套件。

擴充套件後增加了tinyint,mediumint,bigint這3種長度不同的整形,並增加了bit型別,用來存放位資料。

整數型別 位元組 範圍(有符號) 範圍(無符號) 用途

tinyint 1位元組 (-128,127) (0,255) 小整數值

smallint 2位元組 (-32 768,32 767) (0,65 535) 大整數值

mediumint 3位元組 (-8 388 608,8 388 607) (0,16 777 215) 大整數值

int或integer 4位元組 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整數值

bigint 8位元組 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 極大整數值

float 4位元組 (-3.402 823 466 e+38,1.175 494 351 e-38),0,(1.

175 494 351 e-38,3.402 823 466 351 e+38) 0,(1.175 494 351 e-38,3.

402 823 466 e+38) 單精度浮點數值

double 8位元組 (1.797 693 134 862 315 7 e+308,2.225 073 858 507 201 4 e-308),0,(2.

225 073 858 507 201 4 e-308,1.797 693 134 862 315 7 e+308) 0,(2.225 073 858 507 201 4 e-308,1.

797 693 134 862 315 7 e+308) 雙精度浮點數值

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

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 位。

忽略 decimal 資料型別的精度和計數方法修飾符將會使 mysql 資料庫把所有標識為這個資料型別的字段精度設定為 10,計算方法設定為 0。

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

二.字串型別

mysql 提供了8個基本的字串型別,分別:char、varchar、binary、varbinary、blob、text、enum 各set等多種字串型別。

可以儲存的範圍從簡單的乙個字元到巨大的文字塊或二進位制字串資料。

字串型別 位元組大小 描述及儲存需求

char 0-255位元組 定長字串

varchar 0-255位元組 變長字串

tinyblob 0-255位元組 不超過 255 個字元的二進位制字串

tinytext 0-255位元組 短文本字串

blob 0-65535位元組 二進位制形式的長文字資料

text 0-65535位元組 長文字資料

mediumblob 0-16 777 215位元組 二進位制形式的中等長度文字資料

mediumtext 0-16 777 215位元組 中等長度文字資料

logngblob 0-4 294 967 295位元組 二進位制形式的極大文字資料

longtext 0-4 294 967 295位元組 極大文字資料

varbinary(m) 允許長度0-m個位元組的定長位元組符串,值的長度+1個位元組

binary(m) m 允許長度0-m個位元組的定長位元組符串

char 和 varchar 型別

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

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

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

這個指示器的方式:char 把這個大小視為值的大小,不長度不足的情況下就用空格補足。而 varchar 型別把它視為最大值並且只使用儲存字串實際需要的長度

(增加乙個額外位元組來儲存字串本身的長度)來儲存值。所以短於指示器長度的 varchar 型別不會被空格填補,但長於指示器的值仍然會被截短。

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

varchar 型別在使用 binary 修飾符時與 char 型別完全相同。

text 和 blob 型別

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

聲音檔案等二進位制資料型別。

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

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

三.日期和時間型別

在處理日期和時間型別的值時,mysql 帶有 5 個不同的資料型別可供選擇。它們可以被分成簡單的日期、時間型別,和混合日期、時間型別。

根據要求的精度,子型別在每個分型別中都可以使用,並且 mysql 帶有內建功能可以把多樣化的輸入格式變為乙個標準格式。

型別 大小(位元組) 範圍 格式 用途

date 4 1000-01-01/9999-12-31 yyyy-mm-dd 日期值

time 3 '-838:59:59'/'838:59:59' hh:mm:ss 時間值或持續時間

year 1 1901/2155 yyyy 年份值

datetime 8 1000-01-01 00:00:00/9999-12-31 23:

59:59 yyyy-mm-dd hh:mm:

ss 混合日期和時間值

timestamp 4 1970-01-01 00:00:00/2037 年某時 yyyymmdd hhmmss 混合日期和時間值,時間戳

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 型別可以從預定義的集合中取得任意數量的值。並且與 enum 型別相同的是任何試圖在 set 型別欄位中插入非預定義的值都會使

mysql 插入乙個空字串。如果插入乙個即有合法的元素又有非法的元素的記錄,mysql 將會保留合法的元素,除去非法的元素。

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

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

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

通過對每種資料型別的用途,物理儲存,表示範圍等有乙個概要的了解。這樣在面對具體應用時,就可以根據相應的特來來選擇合適的資料型別,使得我們能夠爭取在滿足應用的基礎上,

用較小的儲存代價換來較高的資料庫效能。

SQL資料型別使用,sql資料型別有哪些?

各種資料型別並不是死的,很多東西需要看你使用時的習慣和一致性需要學號字段設定時基本上是通長度,這時候用char正好契合,如果你非要用int,float或者varchar等也是可以的,但是在使用以及給使用者看的時候有很多需要轉換,比較麻煩 bit只用2個值用來定義是 否,男 女,有效 無效,等標記性質...

sql資料型別有哪些

一 整數資料型別 整數資料型別是最常用的資料型別之一。1 int integer 62616964757a686964616fe58685e5aeb931333335313233 int 或integer 資料型別儲存從 2的31次方 2 147 483 648 到2的31次方 1 2 147 48...

oracle支援的資料型別有哪些

oracle資料庫的核心是表,表中的列使用到的常見資料型別如下 對應number型別的示例 對於日期型別,可以使用sysdate內建函式可以獲取當前的系統日期和時間,返回date型別,用systimestamp函式可以返回當前日期 時間和時區。oracle 所有的資料型別有哪些?oracle資料庫的...