mysql 字段型別選擇

2021-08-08 21:11:19 字數 2767 閱讀 5488

整數型別:

型別占用位元組

數值範圍

tinyint

1-128~127/0~255

smallint

2-32768~32767/0~65535

mediumint

3-8388608~8388607/0~16777215

int/integer

4-2147483648~2147483647/0~4294967295

bigint

8-9223372036854775808~9223372036854775807/0~18446744073709551615

整數的寬度指示符m必須與zerofill配合使用,當數值長度小於m時,會在數值前面加上足夠的0使得長度達到m。當長度大於等於m時,保持原樣。但m的大小不會影響型別的數值範圍,即int(4)與int(5)的數值範圍大小是一樣的。只是儲存1245時,int(4)會1245,int(5)會01245。

定點數和浮點數

型別占用位元組

float

4double

8decimal/numeric

m+2

浮點數的寬度指示符m與整數的不一樣,它表示數字總的個數。浮點數和定點數都可以設定小數點的位數d(d<=m)。所以(m,d)表示的數的範圍為:總長度為m,小數點後保留d位,超過d位進行四捨五入處理。decimal比float更加準確,占用空間也比較少,建議使用decimal。

字元型別

型別占用長度

char

1<=m<=255

varchar

l+1,l<=m,1<=m<=255

tinytext

l+1,l<2^8

text

l+2,l<2^16

mediumtext

l+3,l<2^24

longtext

l+4,l<2^32

tinyblob

l+1,l<2^8

blob

l+2,l<2^16

mediumblob

l+3,l<2^24

longblob

l+4,l<2^32

enum

1或2位元組,依賴與列舉數量(最多2^8-1)

set1,2,3,4或8個位元組, 取決於集合成員的數量(最多64個成員)

char(m):定長字串,適用於長度相對固定的字串。長度不滿m的字串,會在後面補空格,使得長度達到m。所以原字串後面不能有空格,否則在查詢出來時會被刪除。

varchar(m):變長字串,長度l不滿m時,不會新增空格,它會再用乙個位元組來儲存長度。所有字串後的空格會被保留下來。由於變長,所以效能比char差。

xxtext(m):大文字字串,不區分大小寫,不能用來儲存。在非嚴格模式下,字串長度超過限制時,會進行截斷處理。如果截斷不是空格,則會出現警告資訊。在嚴格模型下,則會直接報錯。實際的長度還會與編碼字符集有關。

xxblob(m):二進位制字串,區分大小寫,沒有字符集,排序和比較基於列值位元組的數值值。在非嚴格模式下,字串長度超過限制時,會進行截斷處理。如果截斷不是空格,則會出現警告資訊。在嚴格模型下,則會直接報錯。

enum:在設計表的時候就預先定義列舉的值(值後面的空格會被刪除),每次只能從其中選取乙個來作為該字段的指,或者設定該字段值為null。這些列舉值會被儲存為數字,並且從 1 開始用數字做索引,數字0表示空字串。使用order by對該列進行排序時,缺省會按照索引排序(null最前面,然後到空白字元,最後才是定義的值)。要設定按照ascii排序,必須使用group by cast(col as char)或group by concat(col)。

set:在設計表就預定義set的值,每次可以從其中選取1個以上的值,也可以設定為null或空白字串。mysql會用數字儲存set值,所儲存值的低階位對應第1個set成員。如果在數值上下文中檢索乙個值,檢索的值的位設定對應組成列值的set成員。例如,』a』對應二進位制數字001,』b』對應010,』c』對應100.所以輸入十進位制數字5,會組合成』a』,』c』。可以find_in_set(要搜尋的值,set所在的列)函式或like操作符搜尋set值

日期型別

型別格式化

範圍time

『hh:mm:ss』

『-838:59:59』~』838:59:59』

year

『yyyy』

『1901』~』2155』

date

『yyyy:mm:dd』

『1000:01:01』~』9999:12:31』

datetime

『yyyy:mm:dd hh:mm:ss』

『1000-01-01 00:00:00』~』9999-12-31 23:59:59』

timestamp

無『1970-01-01 00:00:01』 utc ~』2038-01-19 03:14:07』 utc

time:time型別不僅可以用於表示一天的時間(必須小於24小時),還可能為某個事件過去的時間或兩個事件之間的時間間隔。沒有冒號時,mysql解釋值時假定最右邊的兩位表示秒。如』1822』表示』00:18:22』。無效time值被轉換為』00:00:00』。

year:非法值轉為0000.

- 四位字串:範圍從』1901』~』2155』

- 四位數字:範圍從1901~2155

- 兩位字串:範圍從』00』:』99』。』00』~』69轉化為』2000』~』2069』,』70』~』99』轉化為』1970』~』1999』

- 兩位數字:範圍從1~99.1~69轉化為2001~2069,70~99轉為1970~1999.

MySQL 字段型別選擇

在對資料進行比較操作時,同樣的資料,字元處理往往比數字處理慢,int要比varchar型別在mysql處理上簡單。比如時間可以考慮用int來儲存,ip位址也可以考慮用bigint來儲存。列的長度越小,利於效能提公升。tinyint適合列舉,0標示男,1標示女,2,標示保密 char與varchar ...

mysql選擇字段 mysql欄位型別如何選擇

本文主要和大家分享mysql欄位型別如何選擇。希望能幫助到大家。盡量少的佔據儲存空間 整型 時間型別 選擇準確的型別 型別含義time 時分秒 datetime 年月日 時分秒 year 年份 date 年月日 timestamp 時間戳 1970 1 1到現在經歷的秒數 資料的整合最好固定長度 c...

MySQL 表字段型別選擇

mysql欄位型別大致分為以下幾類 字元型 char,varchar,set,enum,text,blob,longtext等 數字型 int,float,double,tinyint,decimal等 日期型 date,time,datetime 那麼對於設計表的時候該如何選擇欄位的資料型別?可以...