整數型別:
型別占用位元組
數值範圍
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 那麼對於設計表的時候該如何選擇欄位的資料型別?可以...