mysql欄位型別詳解 MySQL資料型別詳解

2021-10-18 03:18:41 字數 3787 閱讀 9510

引言

mysql中定義資料欄位的型別對你資料庫的優化是非常重要的。

mysql支援多種型別,大致可以分為三類:數值、日期/時間和字串(字元)型別,如下腦圖所示:

數值型別

型別大小範圍(有符號)範圍(無符號)用途

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,223,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(11)和int(8),都是一樣的佔4位元組。tinyint(1)和tinyint(10)也都占用乙個位元組。

那麼後面的11和8,有啥用呢。

資料型別(m)中的m不是表示的資料長度,而是表示資料在顯示時顯示的最小長度。tinyint(1) 這裡的1表示的是 最短顯示乙個字元。tinyint(2) 這裡的2表示的是 最短顯示兩個字元。

當字元長度(m)超過對應資料型別的最大表示範圍時,相當於啥都沒發生;

當字元長度(m)小於對應資料型別的表示範圍時,就需要指定拿某個字元來填充,比如zerofill(表示用0填充),

設定tinyint(2) zerofill 你插入1時他會顯示01;設定tinyint(4) zerofill 你插入1時他會顯示0001。

即使你建表時,不指定括號數字,mysql會自動分配長度:int(11)、tinyint(4)、smallint(6)、mediumint(9)、bigint(20)。

decimal(m,d)表示列可以儲存d位小數的m位數。十進位制列的實際範圍取決於精度和刻度。例如decimal(5,2) -- 取值範圍是 -999.99 到 999.99

整數的位數必須小於等於m-d,不然報錯。小數的位數可以大於d位。多出d位時會做四捨五入,擷取到d位。

以上均不包括小數點、符號的位數。數字的總長度是m位,儲存後的小數字最多是d位。如果儲存後是整數,小數字不會補0。

日期和時間型別

型別大小

(位元組)範圍格式用途

date

1000-01-01/9999-12-31

yyyy-mm-dd

日期值time

'-838:59:59'/'838:59:59'

hh:mm:ss

時間值或持續時間

year

1901/2155

yyyy

年份值datetime

1000-01-01 00:00:00/9999-12-31 23:59:59

yyyy-mm-dd hh:mm:ss

混合日期和時間值

timestamp

1970-01-01 00:00:00/2038

結束時間是第 2147483647 秒,北京時間 2038-1-19 11:14:07,格林尼治時間 2023年1月19日 凌晨 03:14:07

yyyymmdd hhmmss

混合日期和時間值,時間戳

字串型別

型別大小用途

char

0-255位元組

定長字串

varchar

0-65535 位元組

變長字串

tinyblob

0-255位元組

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

tinytext

0-255位元組

短文本字串

blob

0-65 535位元組

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

text

0-65 535位元組

長文字資料

mediumblob

0-16 777 215位元組

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

mediumtext

0-16 777 215位元組

中等長度文字資料

longblob

0-4 294 967 295位元組

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

longtext

0-4 294 967 295位元組

極大文字資料

char的列長度是固定的,char的長度可選範圍在0-255字元之間。也就是char最大能儲存255個字元。

varchar的列長度是可變的,在mysql5.0.3之前varchar的長度範圍為0-255字元,mysql5.0.3之後varchar的長度範圍為0-65535個位元組。

char(m)定義的列的長度為固定的,m取值可以為0-255之間,當儲存char值時,在它們的右邊填充空格以達到指定的長度。當檢索到char值時,尾部的空格被刪除掉。在儲存或檢索過程中不進行大小寫轉換。char儲存定長資料很方便,char欄位上的索引效率級高,比如定義char(10),那麼不論你儲存的資料是否達到了10個字元,都要占去10個字元的空間,不足的自動用空格填充。

varchar(m)定義的列的長度為可變長字串,varchar的最大有效長度由最大行大小和使用的字符集確定。整體最大長度是65,532位元組。varchar值儲存時不進行填充。當值儲存和檢索時尾部的空格仍保留,符合標準sql。varchar儲存變長資料,但儲存效率沒有char高。如果乙個字段可能的值是不固定長度的,我們只知道它不可能超過10個字元,把它定義為 varchar(10)是最合算的。varchar型別的實際長度是它的值的實際長度+1。為什麼"+1"呢?這乙個位元組用於儲存實際使用了多大的長度。從空間上考慮,用varchar合適;從效率上考慮,用char合適,關鍵是根據實際情況找到權衡點。

簡單來說:varchar(m)裡面表示的是長度,例如:varchar(5)表示最大可儲存5個中文或5個英文本母。

總結資料庫作為程式的核心,設計的好壞,直接影響系統的效能,因此要不斷總結學習,設計符號標準的、穩定的、可靠的資料庫。

mysql 字段 MySQL欄位型別詳解

mysql支援大量的列型別,它可以被分為3類 數字型別 日期和時間型別以及字串 字元 型別。本節首先給出可用型別的乙個概述,並且總結每個列型別的儲存需求,然後提供每個類中的型別性質的更詳細的描述。概述有意簡化,更詳細的說明應該考慮到有關特定列型別的附加資訊,例如你能為其指定值的允許格式。由mysql...

MySQL欄位型別詳解

2009 01 05 09 25 小大 分享至 詞庫網 監控 伺服器監控 seo監控 手機遊戲 iphone遊戲 mysql支援大量的列型別,它可以被分為3類 數字型別 日期和時間型別以及字串 字元 型別。本節首先給出可用型別的乙個概述,並且總結每個列型別的儲存需求,然後提供每個類中的型別性質的更詳...

MySQL欄位型別詳解

mysql支援大量的列型別,它可以被分為3類 數字型別 日期和時間型別以及字串 字元 型別。本節首先給出可用型別的乙個概述,並且總結每個列型別的儲存需求,然後提供每個類中的型別性質的更詳細的描述。概述有意簡化,更詳細的說明應該考慮到有關特定列型別的附加資訊,例如你能為其指定值的允許格式。由mysql...