1. 程式人生 > >數據類型 介紹

數據類型 介紹

數據類型

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

數據類型 介紹