一:MySQL數(shù)據(jù)類型

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、成都微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了色尼免費(fèi)建站歡迎大家使用!
MySQL中定義數(shù)據(jù)字段的類型對(duì)你數(shù)據(jù)庫(kù)的優(yōu)化是非常重要的
MySQL支持多種數(shù)據(jù)類型,大致可以分為三類:數(shù)值 日期/時(shí)間和字符串
二、數(shù)值類型
1.整數(shù)類型
2.浮點(diǎn)數(shù)
如果希望保證值比較準(zhǔn)確,推薦使用定點(diǎn)數(shù)數(shù)據(jù)類型。MySql中的浮點(diǎn)類型有float,double和real。他們定義方式為:FLOAT(M,D) 、 REAL(M,D) 、 DOUBLE PRECISION(M,D)。
FLOAT和DOUBLE中的M和D的取值默認(rèn)都為0,即除了最大最小值,不限制位數(shù)。允許的值理論上是-1.7976931348623157E+308~-2.2250738585072014E-308、0和2.2250738585072014E-308~1.7976931348623157E+308。M、D范圍如下:
(MySql5.7實(shí)測(cè),與IEEE標(biāo)準(zhǔn)計(jì)算的實(shí)際是不同的,下面介紹):M取值范圍為0~255。FLOAT只保證6位有效數(shù)字的準(zhǔn)確性,所以FLOAT(M,D)中,M=6時(shí),數(shù)字通常是準(zhǔn)確的。如果M和D都有明確定義,其超出范圍后的處理同decimal。
D取值范圍為0~30,同時(shí)必須=M。double只保證16位有效數(shù)字的準(zhǔn)確性,所以DOUBLE(M,D)中,M=16時(shí),數(shù)字通常是準(zhǔn)確的。如果M和D都有明確定義,其超出范圍后的處理同decimal。
CHAR值時(shí),在它們的右邊填充空格以達(dá)到指定的長(zhǎng)度。當(dāng)檢索到CHAR值時(shí),尾部的空格被刪除掉,所以,我們?cè)诖鎯?chǔ)時(shí)字符串右邊不能有空格,即使有,查詢出來(lái)后也會(huì)被刪除。在存儲(chǔ)或檢索過(guò)程中不進(jìn)行大小寫轉(zhuǎn)換。
三、時(shí)間日期類型(5)
該“0”值如下:
請(qǐng)點(diǎn)擊輸入圖片描述
四、各種類型占用的存儲(chǔ)
1.數(shù)值類型
請(qǐng)點(diǎn)擊輸入圖片描述
定點(diǎn)數(shù)的比較特殊,而且與具體版本也有關(guān)系,此處單獨(dú)解釋:
使用二進(jìn)制格式將9個(gè)十進(jìn)制(基于10)數(shù)壓縮為4個(gè)字節(jié)來(lái)表示DECIMAL列值。每個(gè)值的整數(shù)和分?jǐn)?shù)部分的存儲(chǔ)分別確定。每個(gè)9位數(shù)的倍數(shù)需要4個(gè)字節(jié),并且“剩余的”位需要4個(gè)字節(jié)的一部分。下表給出了超出位數(shù)的存儲(chǔ)需求:
請(qǐng)點(diǎn)擊輸入圖片描述
2.時(shí)間日期
請(qǐng)點(diǎn)擊輸入圖片描述
從版本5.6.4開始,存儲(chǔ)需求就有所改變,根據(jù)精度而定。不確定部分需要的存儲(chǔ)如下:
請(qǐng)點(diǎn)擊輸入圖片描述
比如,TIME(0), TIME(2), TIME(4), 和TIME(6) 分別使用3, 4, 5, 6 bytes。
3.字符串
請(qǐng)點(diǎn)擊輸入圖片描述
4.類型的選擇
為了優(yōu)化存儲(chǔ),在任何情況下均應(yīng)使用最精確的類型。
例如,如果列的值的范圍為從1到99999,若使用整數(shù),則MEDIUMINT UNSIGNED是好的類型。在所有可以表示該列值的類型中,該類型使用的存儲(chǔ)最少。
用精度為65位十進(jìn)制數(shù)(基于10)對(duì)DECIMAL 列進(jìn)行所有基本計(jì)算(+、-、*、/)。
使用雙精度操作對(duì)DECIMAL值進(jìn)行計(jì)算。如果準(zhǔn)確度不是太重要或如果速度為最高優(yōu)先級(jí),DOUBLE類型即足夠了。為了達(dá)到高精度,可以轉(zhuǎn)換到保存在BIGINT中的定點(diǎn)類型。這樣可以用64位整數(shù)進(jìn)行所有計(jì)算,根據(jù)需要將結(jié)果轉(zhuǎn)換回浮點(diǎn)值。
5.使用其他數(shù)據(jù)庫(kù)的SQL語(yǔ)句
為了使用為其它數(shù)據(jù)庫(kù)編寫的SQL執(zhí)行代碼,MySQL按照下表所示對(duì)列類型進(jìn)行映射。通過(guò)這些映射,可以很容易地從其它數(shù)據(jù)庫(kù)引擎將表定義導(dǎo)入到MySQL中:
請(qǐng)點(diǎn)擊輸入圖片描述
Mysql支持的多種數(shù)據(jù)類型主要有:數(shù)值數(shù)據(jù)類型、日期/時(shí)間類型、字符串類型。?
1.整數(shù)數(shù)據(jù)類型及其取值范圍:
類型
說(shuō)明
存儲(chǔ)需求(取值范圍)
tinyint ? ?很小整數(shù) ? ?1字節(jié)([0~255]、[-128~127]); 255=2^8-1;127=2^7-1 ?
smallint ? ?小整數(shù) ? ?2字節(jié)(0~65535、-32768~32767) ;65535=2^16-1 ?
mediumint ? ?中等 ? ?3字節(jié)(0~16777215) ;16777215=2^24-1 ?
int(integer) ? ?普通 ? ?4字節(jié)(0~4294967295) ;4294967295=2^32-1 ?
bigint ? ?大整數(shù) ? ?8字節(jié)(0~18446744073709551615);18446744073709551615=2^64-1 ?
浮點(diǎn)數(shù)定點(diǎn)數(shù):
類型名稱
說(shuō)明
存儲(chǔ)需求
float ? ?單精度浮點(diǎn)數(shù) ? ?4字節(jié) ?
double ? ?雙精度浮點(diǎn)數(shù) ? ?8字節(jié) ?
decimal ? ?壓縮的“嚴(yán)格”定點(diǎn)數(shù) ? ?M+2字節(jié) ?
注:定點(diǎn)數(shù)以字符串形式存儲(chǔ),對(duì)精度要求高時(shí)使用decimal較好;盡量避免對(duì)浮點(diǎn)數(shù)進(jìn)行減法和比較運(yùn)算。?
2.時(shí)間/日期類型:?
year范圍:1901~2155;?
time格式:‘HH:MM:SS’(如果省略寫,并且沒有冒號(hào),則默認(rèn)最右起2位為秒,再到分,最后到時(shí));?
插入系統(tǒng)當(dāng)前時(shí)間:insert into 表名 values(current_date()),(now());?
date類型:‘YYYY-MM-DD’;?
datetime(日期+時(shí)間):‘YYYY-MM-DD HH:MM:SS’或‘YYYYMMDDHHMMSS’,取值范圍:‘1000-01-01 00:00:00’~‘9999-12-31 23:59:59’;?
timestamp格式同datetime,但在存儲(chǔ)時(shí)需要4個(gè)字節(jié)(datetime需要8字節(jié)),并且以UTC(世界標(biāo)準(zhǔn)時(shí)間)進(jìn)行存儲(chǔ)(即timestamp會(huì)隨設(shè)置的時(shí)區(qū)而變化,而datetime存儲(chǔ)的絕不會(huì)變化);timestamp的范圍:1970-2037。?
3.字符串類型:?
text類型:tinytext、text、mediumtext、longtext;
類型
范圍
tinytext ? ?255=2^8-1 ?
text ? ?65535=2^16-1 ?
mediumtext ? ?16777215=2^24-1 ?
longtext ? ?4294967295=4GB=2^32-1 ?
char的存儲(chǔ)需求是定義時(shí)指定的固定長(zhǎng)度;varchar的存儲(chǔ)需求是取決于實(shí)際值長(zhǎng)度。?
set類型格式:set(’值1’,’值2’…) ——可以有0或者多個(gè)值,對(duì)于set而言,若插入的值為重復(fù)的,則只娶一個(gè)。插入的值亂序,則自動(dòng)按順序插入排列。插入不正常值,則忽略。?
二進(jìn)制類型:?
bit(M)——保存位字段值(位字段類型),M表示值的位數(shù);?
eg:select BIN(b+0) from 表名;—–b為列名;b+0表示將二進(jìn)制的結(jié)果轉(zhuǎn)換為對(duì)應(yīng)的數(shù)字的值,BIN()函數(shù)將數(shù)字轉(zhuǎn)換為二進(jìn)制。?
blog——-二進(jìn)制大對(duì)象,用來(lái)存儲(chǔ)可變數(shù)量的數(shù)據(jù)。
數(shù)據(jù)類型
存儲(chǔ)范圍(字節(jié))
tinyblog ? ?最多255=2^8-1 字節(jié) ?
bolg ? ?最多65535=2^16-1 字節(jié) ?
mediumblog ? ?最多16777215=2^24-1 字節(jié) ?
longblog ? ?最多4294967295=4GB=2^32-1 字節(jié) ?
1、基礎(chǔ)知識(shí)
1.1mysql 數(shù)字類型種類和存儲(chǔ)范圍
MySQL支持SQL標(biāo)準(zhǔn)整數(shù)類型INTEGER(或INT)和SMALLINT。作為標(biāo)準(zhǔn)的擴(kuò)展,MySQL還支持整數(shù)類型TINYINT,MEDIUMINT和BIGINT。下表顯示了每種整數(shù)類型所需的存儲(chǔ)和范圍。
1.2字段長(zhǎng)度說(shuō)明
MySQL 類型關(guān)鍵字后面的括號(hào)內(nèi)指定整數(shù)值的顯示寬度(例如,INT(10))。該可選顯示寬度規(guī)定用于顯示寬度小于指定的列寬度的值時(shí)從左側(cè)填滿寬度。顯示寬度并不限制可以在列內(nèi)保存的值的范圍,也不限制超過(guò)列的指定寬度的值的顯示。
2、字段說(shuō)明
當(dāng)我們存在字段int(3)時(shí),存儲(chǔ)數(shù)據(jù)2440會(huì)保存成功,且會(huì)正常顯示。即 int(3)和 int(10)可以存儲(chǔ)的數(shù)據(jù)大小是相同,限制范圍在int的范圍與數(shù)字無(wú)關(guān)。數(shù)字只是在需要左側(cè)用零填滿時(shí)起作用。
3、tips
1、在我們用int類型作為id的主鍵時(shí),建議選擇Unsigned,這樣存儲(chǔ)的范圍可以增加一倍
2、判斷可能出現(xiàn)的字段長(zhǎng)度 合理選用tinyint smallint mediumint 和 int
網(wǎng)站題目:mysql怎么表示整數(shù),mysql 整數(shù)
當(dāng)前網(wǎng)址:http://chinadenli.net/article12/dsgosgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、微信小程序、網(wǎng)站維護(hù)、全網(wǎng)營(yíng)銷推廣、網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)