mysql tinlong MySQL資料型別詳解

2021-10-18 12:07:07 字數 3787 閱讀 3520

引言

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個英文本母。

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

SQL Server 2005 常用資料型別詳解

1.字串資料型別 char 此資料型別可儲存1 8000個定長字串,字串長度在建立時指定 如未指定,預設為char 1 每個字元占用1byte儲存空間。nchar 此資料型別可儲存1 4000個定長unicode字串,字串長度在建立時指定 如未指定,預設為nchar 1 每個字元占用2bytes儲存...

資料型別基礎資料型別

資料型別 基礎型別 除八大基礎型別其他的都是引用型資料型別 引用資料型別 基礎資料型別 整型 byte 佔乙個位元組,範圍 128 127 short 佔兩個位元組,範圍 32768 32767 int 最常用 佔四個位元組,範圍 2147483648 2147483647 long 佔八個位元組 ...

資料型別 基本資料型別和引用資料型別

一.分類 1,五種簡單資料型別 基本資料型別 number,string,boolean,null,undefined,新增symbol es6 基本資料型別是指存放在棧中的簡單資料段,資料大小確定,記憶體空間大小可以分配,它們是直接按值存放的,所以可以直接按值訪問。1 undefined 宣告的變...