數據類型 介紹
1 概述
數據類型
.數據長什麽樣?
.數據需要多少空間來存放?如整數有不同的類型,存儲的空間不一樣
.系統內置數據類型和用戶定義數據類型
.MySql支持多種列類型:(內置數據類型)
.數值類型
.日期/時間類型
.字符串(字符)類型
.選擇正確的數據類型對於獲得高性能至關重要,三大原則:
.更小的通常更好,盡量使用可正確存儲數據的最小數據類型,原則是夠用就好
.簡單就好,簡單數據類型的操作通常需要更少的CPU周期,復雜的話會消耗額外的資源
.盡量避免NULL,如果包含為NULL的列,對MySQL更難優化
2 數據類型
1 整型
.tinyint(m) 1個字節範圍(-128~127)
.smallint(m)2個字節範圍(-32768~32767)
.mediumint(m)3個字節範圍(-8388608~8388607)
.int(m)4個字節範圍(-2147483648~2147483647)
.bigint(m)8個字節範圍(+-9.22*10的18次方)
取值範圍如果加了unsigned,那麽最大值就會翻倍,如tinyint unsigned的取值範圍為(0~255),表示正整數
int(m)裏的m是表示SELECT查詢結果集中的顯示寬度,並不影響實際的取值範圍,
在int(M)中,M的值跟int(M)所占多少存儲空間並無任何關系。int(3)、int(4)、int(8)在磁盤上都是占用4 btyes的存儲空間。說白了,除了顯示給用戶的方式有點不同外,int(M)跟int數據類型是相同的。
“(M)”指定了int型數值顯示的寬度,如果字段數據類型是int(4),則:當顯示數值10時,在左邊要補上“00”;當顯示數值100是,在左邊要補上“0”;當顯示數值1000000時,已經超過了指定寬度“(4)”,因此按原樣輸出。
MySQL可以為整型類型指定寬度(這裏是表示顯示的寬度),例如Int(11),對絕大多數應用這是沒有意義的:它不會限制值的合法範圍,只是規定了MySQL的一些交互工具(例如MySQL命令行客戶端)用來顯示字符的個數。對於存儲和計算來說,Int(1)和Int(20)是相同的
2 浮點型(float和double),近似值
.float(m,d)單精度浮點型8位精度(4字節) m總個數(88.66,則m為4個數,d為2為小數),d小數位
.double(m,d)雙精度浮點型16位精度(8字節) m總個數,d小數位
.設一個字段定義為float(6,3),如果插入一個數123.45678,實際數據庫裏存的是123.457,但總個數還以實際為準,即6位
這裏和awk不一樣,awk把小數點也算作一位,但是這裏定義的小數,小數點不算一位數。
3 定點數
.在數據庫中存放的是精確值,存為十進制
.decimal(m,d)參數m<65是總個數,d<30且d
.MySQL5.0和更高版本將數字打包保存到一個二進制字符串中(每4個字節存9個數字)。例如,decimal(18,9)小數點兩邊將各存儲9個數字,一共使用9個字節:小數點前的數字用4個字節,小數點後的數字用4個字節,小數點本身占1個字節
定點數一般用來存放財務數據
.浮點類型在存儲同樣範圍的值時,通常比decimal使用更少的
空間。float使用4個字節存儲。double占用8個字節
.因為需要額外的空間和計算開銷,所以應該盡量只在對小數進行精確計算時才使用decimal——例如存儲財務數據。但在數據量比較大的時候,可以考慮使bigint代替decimal
4 字符串(char,varchar,_text)
.char(n)固定長度,最多255個字符,如定義20字節,允許短,如實際只有3字節,但是實際在內存或磁盤中存儲占用20個字節
.varchar(n)可變長度,最多65535個字符,根據實際位數暫用空間
.tinytext可變長度,最多255個字符
.text可變長度,最多65535個字符
.mediumtext可變長度,最多2的24次方-1個字符
.longtext可變長度,最多2的32次方-1個字符
.BINARY(M)固定長度,可存二進制或字符,允許長度為0-M字節,
.VARBINARY(M)可變長度,可存二進制或字符,允許長度為0-M字節,如存儲圖片或二進制內容
.內建類型:ENUM枚舉, SET集合
.char和varchar:
.1.char(n)若存入字符數小於n,則以空格補於其後,查詢之時再將空格去掉。所以char類型存儲的字符串末尾不能有空格,varchar不限於此。
.2.char(n)固定長度,char(4)不管是存入幾個字符,都將占用4個字節,varchar是存入的實際字符數+1個字節(最後可能有一個結束符字符)(n< n>255),所以varchar(4),只存入3個字符也將占用4個字節。
.3.char類型的字符串檢索速度要比varchar類型的快
.varchar和text:
.1.varchar可指定n,text不能指定,內部存儲varchar是存入的實
際字符數+1個字節(n< n>255),text是實際字符數+2個字節。
.2.text類型不能有默認值
.3.varchar可直接創建索引,text創建索引要指定前多少個字符。
varchar查詢速度快於text
除非是寫一篇文章或者小短文,考慮用text,如果是普通的字符串,就直接用varchar就可以
5 二進制數據:BLOB
.BLOB和text存儲方式不同,TEXT以文本方式存儲,英文存儲區分大小寫,而Blob是以二進制方式存儲,不分大小寫
.BLOB存儲的數據只能整體讀出
.TEXT可以指定字符集,BLOB不用指定字符集
6 日期時間類型
.date日期‘2008-12-2‘
.time時間‘12:25:36‘
.datetime日期時間‘2008-12-222:06:44‘
.timestamp自動存儲記錄修改時間,時間戳,只要表裏的任意字段被改動,這個時間戳就會自動變化,這裏的日期格式是和datetime一樣,如日期時間‘2008-12-222:06:44‘
若定義一個字段為timestamp,這個字段裏的時間數據會隨其他字段修改的時候自動刷新,這個數據類型的字段可以存放這條記錄最後被修改的時間
例子如下
創建一張表
如下
create table datetb (idint(3) not null,t1 date not null,t2 time not null,t3 datetime,t4timestamp,primary key (id));
往表裏插入一條記錄,如下
insert into datetb values(1,"2017-09-09","12:53:12","2017-09-0910:10:08","2017-09-09 10:10:09");
修改記錄t2的值如下
update datetb sett2="01:02:03" where id=1;
實驗結果是,timestamp這個字段t4的值會自動變更為當前系統的時間
.YEAR(2), YEAR(4):年份
本文出自 “陽光運維” 博客,請務必保留此出處http://ghbsunny.blog.51cto.com/7759574/1970187
數據類型 介紹