引言
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...