mysql中資料型別扮演者基礎但又非常重要的角色。對資料型別的選擇將影響上層應用的效能和後期維護的成本。因此,給資料選擇正確的型別至關重要。這裡,就簡單的總結下mysql中的資料型別。
1 日期和時間型別
mysql資料庫中有五種與日期和時間有關的資料型別,不同的型別在資料庫中會占用不同的儲存空間。
datetime
8位元組date
3位元組timestamp
4位元組year
1位元組time
3位元組 datetime 是最為詳細的資料型別,可以記錄日期和精確到秒的時間,記錄的時間長度可以從1000-01-01 00:00:00到9999-12-31 23:59:59之間的時間。在資料庫中輸入的標準格式為:yyyy-mm-dd hh:mm:ss。但是其他的形式如:2011/01/01 00+01+10,或者 20110101000110 等都可以。
具體用法如下:
date 只能記錄當前的時間,格式與datetime 相似。
rimestamp 的形式與datetime相同,只是記錄的時間段較短,只能記錄從1970-01-01 00:00:00 到2038-01-19 03:14:07之間的時間,所以占用的空間也較少。
year 和 time 分別用來記錄年份和時間,用法和timedate中相應的部分相同。
對於可以記錄時間的三個變數 time datetime timestamp ,mysql5.6.4版本後開始支援對秒的小樹部分。具體語法為: type_name(fsp) type_name是相應的變數型別,fsp表示支援秒的精度,最大為6.。
2 數字型別
最為常用的整型變數
資料型別
占用空間(位元組)
範圍tinyint
1-128~127
smallint
2-32768~32767
mediumint
3-8388608~8388607
int4
略bigint8略
關於整型數,有一點就是以前總是認為在int後面加長度可以對int的範圍進行限制,但其實int(9)這樣的書寫其實並沒有實質性的意義。
從上面的圖就可以看出,雖然規定了int的長度為1 ,但是依然可以新增 數字11。所以後面的長度其實更多的是起到提示作用,如果要限定int的插入型別的長度,還得通過程式進行約束。
3 浮點型(非精確型別)
mysql支援兩種浮點型資料型別:單精度的float 和雙精度的 double precision(寫成double也可以)。foalt 是單精度的變數,占用的空間為4個位元組,而double precision是雙精度變數,占用8個位元組的空間。另外,mysql支援非標準語法:float(m,d)或者real(m,d)或double precision(m,d),m表示該值一共的位數,d表示小數點後面的位數。如果小數點超出定義的位數,mysql在儲存是會進行四捨五入。
4 高精度型別
decimal 和 numeric 是mysql中的高精度型別,且兩種變數被視為同一種型別。高精度的型別在使用時和浮點型相似,同樣支援非標準語法。但和浮點型不同的是,decimal 和 numeric 在儲存時並不會完全儲存資料的內容,而浮點型則是採用近似的方式儲存,因而decimal 和numeric 更為精確。
5 char 和 varchar
這兩種是用來儲存字元的資料型別。一般來說,char是用來儲存固定長度的字串,而varchar是用來儲存變長字元型別。
對於char型別,定義時char(n) 中的n 的範圍為0~255。在進行儲存時,如果存入的字串長度不到n,mysql會自動在右側用『 』進行補齊。所以說char是用來儲存固定長度的字元的資料型別。
對於varchar型別,定義時varchar(n)中的範圍為0~65535。在進行儲存是,會在右側字首字串的實際長度,而不是在右側進行補齊。因而,在某些情況下,varchar(10)占用的儲存空間可能會是11個字元的長度,也可能會小於10,而char(10)則一定是10個字元的長度。
關於char和varchar,最後需要記住的是,不管是varchar(n)還是char(n)中的n都是字元的長度,而不是占用空間的大小。比如在utf8中,乙個字元占用的空間為3個位元組,所以char(10)占用的空間實際為30個位元組大小。但是在big5中,乙個字元的大小為2bit,所以char(10)占用的空間就是20。
6 binary 和 varbinary
binary 和 varbinary 與char 和 varchar 的用法基本相同,不同的是定義時binary(n)和varbinary(n)中的n是位元組長度,而不是字元長度。所以如果剩餘的空間不到插入的字元的大小,則會進行擷取,值存入前面的部分。比如定義binary(1) 但是存入了'中'(假設字符集為utf8),因為『中』會占用3個位元組,所以並不能全部存,只會存入第乙個位元組的資訊。
7 blob 和 text
這兩種資料型別是mysql專門用來儲存大資料的資料型別。
其中 blob 是二進位制儲存,相當於大資料的binary ,text 是字元型別,相當於大資料的varchar。
innodb儲存引擎在這兩種型別進行儲存時,並不會全部放入資料表中,只會儲存前20個字元作為索引。其他的部分將儲存在行溢位頁中。
排序的時候也是一樣,並不會比較全部的內容,只會比較前1024個位元組的長度(可以通過max-sort-length進行設定,預設值為1024)。
8 menu 和 set 型別
這兩個是mysql中的集合型別,通常用來進行列舉。enum 可以列舉65536個元素,而set最多列舉64個元素。
由於mysql並不支援傳統的check約束,所以通過enum和set 可以解決一部分問題。比如定義性別時只能有兩個選擇,就可以通過enum和set 進行約束。
mysql屬於哪一類程式設計 mysql資料型別
1 整型 mysql資料型別 含義 有符號 tinyint m 1個位元組 範圍 128 127 smallint m 2個位元組 範圍 32768 32767 mediumint m 3個位元組 範圍 8388608 8388607 int m 4個位元組 範圍 2147483648 214748...
mysql數值型資料列舉 MySQL資料型別
資料型別 列型別 1.數值型別 a.整型 型別 位元組 範圍 有符號位 tinyint 1位元組 128 127 無符號位 0 255 smallint 2位元組 32768 32767 mediumint 3位元組 8388608 8388607 int 4位元組 bigint 8位元組 int ...
mysql物件資料型別 MYSQL 的資料型別
mysql 資料型別 mysql中定義資料欄位的型別對你資料庫的優化是非常重要的。mysql支援多種型別,大致可以分為三類 數值 日期 時間和字串 字元 型別。數值型別 mysql支援所有標準sql數值資料型別。這些型別包括嚴格數值資料型別 integer smallint decimal和nume...