
mysql的decimal類型,mysql中decimal的用法

大家好,今天小編來為大家解答以下的問題,關于mysql的decimal類型,mysql中decimal的用法這個很多人還不知道,現在讓我們一起來看看吧!decimal是...
大家好,今天小編來為大家解答以下的問題,關于mysql的decimal類型,mysql中decimal的用法這個很多人還不知道,現在讓我們一起來看看吧!
decimal是什么數據類型
DECIMAL從MySQL5.1引入,列的聲明語法是DECIMAL(M,D)。NUMERIC與DECIMAL同義,如果字段類型定義為NUMERIC,則將自動轉成DECIMAL。對于聲明語法DECIMAL(M,D),自變量的值范圍如下:M是最大位數(精度),范圍是1到65。可不指定,默認值是10。D是小數點右邊的位數(小數位)。范圍是0到30,并且不能大于M,可不指定,默認值是0。
DECIMAL數據類型用于要求非常高的精確度的計算中,這些類型允許指定數值的精確度和計數方法作為選擇參數。精確度在這里是指為這個值保存的有效數字的總個數,而計數方法表示小數點后數字的個數。采用decimal(numeric),優點在于可以自定義小數點位數,精度高。
Decimal不是浮點數據類型。結構包含一個二進制整數值,一個符號位和一個整數縮放因子。用于指定值的哪一部分是Decimal小數部分。因此,數字在內存中的表示形式比浮點類型更精確DecimalSingleDouble()。Decimal數據類型是所有數值類型中速度最慢的。在選擇數據類型之前,應權衡精度與性能的重要性。
mysql數據類型的詳解
MySQL數據庫的表是一個二維表,由一個或多個數據列構成。每個數據列都有它的特定類型,該類型決定了MySQL如何看待該列數據,我們可以把整型數值存放到字符類型的列中,MySQL則會把它看成字符串來處理。MySQL中的列類型有三種:數值類、字符串類和日期/時間類。從大類來看列類型和數值類型一樣,都是只有三種。但每種列類型都還可細分。下面對各種列類型進行詳細介紹。
數值類的數據列類型數值型的列類型包括整型和浮點型兩大類。
TINYINT:1字節非常小的正整數,帶符號:-128~127,不帶符號:0~255SMALLINT:2字節小整數,帶符號:-32768~32767,不帶符號:0~65535MEDIUMINT:3字節中等大小的整數,帶符號:-8388608~8388607,不帶符號:0~16777215INT:4字節標準整數,帶符號:-2147483648~2147483647,不帶符號:0~4294967295BIGINT:8字節大整數,帶符號:-9223372036854775808~9233372036854775807,不帶符號:0~18446744073709551615FLOAT:4字節單精度浮點數,最小非零值:+-1.175494351E-38,最大非零值:+-3.402823466E+38DOUBLE:8字節雙精度浮點數,最小非零值:+-2.2250738585072014E-308,最大非零值:+-1.7976931348623157E+308DECIMAL:M+2字節以字符串形式表示的浮點數,它的取值范圍可變,由M和D的值決定。MYSQL支持大量的列類型,它們可以被分為3類:數字類型、日期和時間類型以及字符串(字符)類型。這個章節首先給出可用類型的概述,并且總結各類型所需的存儲需求,然后提供各類型中的類型范疇更詳細的描述。概述有意地簡化了。更詳細的說明應該參考特寫列類型的附加信息,例如你能為其指定值的允許格式。MySQL支持的列類型在下面列出。下列代碼字母用于描述中:M指出最大的顯示尺寸。最大的顯示尺寸長度為255。D適用于浮點類型。指出跟隨在十進制小數點后的數字數量。最大可能值為30,但不應大于M-2。方括號(“[”and“]”)指定可選的類型修飾部份。注意,如果為一個列指定了ZEROFILL,MySQL將自動為這個列添加UNSIGNED屬性。警告:你應該知道當在兩個整數類型值中使用減法時,如有一個為UNSIGNED類型,那么結果也是無符號的。查看章節6.3.5Cast函數。
TINYINT[(M)][UNSIGNED][ZEROFILL]-128到127。無符號的范圍是0到255。BITBOOL它們是TINYINT(1)的同義詞。
SMALLINT[(M)][UNSIGNED][ZEROFILL]一個小整數。有符號的范圍是-32768到32767。無符號的范圍是0到65535。
MEDIUMINT[(M)][UNSIGNED][ZEROFILL]一個中等大小的整數。有符號的范圍是-8388608到8388607。無符號的范圍是0到16777215。
INT[(M)][UNSIGNED][ZEROFILL]一個正常大小的整數。有符號的范圍是-2147483648到2147483647。無符號的范圍是0到4294967295。
INTEGER[(M)][UNSIGNED][ZEROFILL]INT的同義詞。
BIGINT[(M)][UNSIGNED][ZEROFILL]一個大的整數。有符號的范圍是-9223372036854775808到9223372036854775807。無符號的范圍是0到18446744073709551615。你應該知道的有關BIGINT列的一些事情:BIGINT或DOUBLE值來完成的,因此你不應該使用大于9223372036854775807(63bits)的無符號大整數,除了位函數之外!如果你這樣做了,結果中的某些大數字可能會出錯,因為將BIGINT轉換成DOUBLE時產生了舍入錯誤。MySQL4.0在下列情況下可以處理BIGINT:在一個BIGINT列中使用整數存儲一個大的無符號值。在MIN(big_int_column)和MAX(big_int_column)中。當兩個操作數都是整數時使用操作符(+、-、*、等)。通常你可以在一個BIGINT列中以字符串方式存儲的一個精確的整數。在這種情況下,MySQL將執行一個字符串到數字的轉換,包括無intermediate的雙精度表示法。當兩個參數均是整數值時,“-”、“+”和“*”將使用BIGINT運算!這就意味著,如果兩個大整數的乘積(或函數的結果返回整數)的結果大于9223372036854775807時,你可能會得到意想不到的結果。FLOAT(precision)[UNSIGNED][ZEROFILL]一個浮點型數字。precision可以是<=24作為一個單精度的浮點數字和介于25和53之間作為一個雙精度的浮點數字。這些類型與下面描述的FLOAT和DOUBLE類型相似。FLOAT(X)有與相應的FLOAT和DOUBLE類型同樣的范圍,但是顯示尺寸和十進制小數位數是未定義的。在MySQL3.23中,它是一個真實的浮點值。而在MySQL早期的版本中,FLOAT(precision)通常有2小數位。注意,由于在MySQL中所有的計算都是以雙精度執行的,所以使用FLOAT可能帶來一些意想不到的問題。查看章節A.5.6解決沒有匹配行的問題。FLOAT[(M,D)][UNSIGNED][ZEROFILL]一個小的(單精度)浮點數字。允許的值是-3.402823466E+38到-1.175494351E-38、0和1.175494351E-38到3.402823466E+38。如果UNSIGNED被指定,負值是不允許的。M是顯示寬度,D是小數位數。FLOAT沒有參數或有X<=24的FLOAT(X)代表一個單精度的浮點數字。DOUBLE[(M,D)][UNSIGNED][ZEROFILL]一個正常大小的(雙精度)浮上數字。允許的值是-1.7976931348623157E+308到-2.2250738585072014E-308、0和2.2250738585072014E-308到1.7976931348623157E+308。如果UNSIGNED被指定,負值是不允許的。M是顯示寬度,D是小數位數。DOUBLE沒胡參數或有25<=X<=53的FLOAT(X)代表一個雙精度的浮點數字。DOUBLEPRECISION[(M,D)][UNSIGNED][ZEROFILL]REAL[(M,D)][UNSIGNED][ZEROFILL]它們是DOUBLE同義詞。DECIMAL[(M[,D])][UNSIGNED][ZEROFILL]一個未壓縮(unpacked)的浮點數。運作如同一個CHAR列:“unpacked”意味著數字是以一個字符串存儲的,值的每一位將使用一個字符。小數點并且對于負數,“-”符號不在M中計算(但是它們的空間是被保留的)。如果D是0,值將沒有小數點或小數部份。DECIMAL值的最大范圍與DOUBLE一致,但是對于一個給定的DECIMAL列,實際的范圍可以被所選擇的M和D限制。如果UNSIGNED被指定,負值是不允許的。如果D被忽略,缺省為0。如果M被忽略,缺省為10。在MySQL3.23以前,M參數必須包含符號與小數點所需的空間。DEC[(M[,D])][UNSIGNED][ZEROFILL]NUMERIC[(M[,D])][UNSIGNED][ZEROFILL]DECIMAL的同義詞。DATE一個日期。支持的范圍是'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式顯示DATE值,但是允許你以字符串或數字給一個DATE列賦值。查看章節6.2.2.2DATETIME、DATE和TIMESTAMP類型。DATETIME一個日期和時間的組合。支持的范圍是'1000-01-0100:00:00'到'9999-12-3123:59:59'。MySQL以'YYYY-MM-DDHH:MM:SS'格式顯示DATETIME值,但是允許你以字符串或數字給一個DATETIME列賦值。查看章節6.2.2.2DATETIME、DATE和TIMESTAMP類型。TIMESTAMP[(M)]一個時間戳。范圍是'1970-01-0100:00:00'到2037年間的任意時刻。MySQL4.0和更早版本中,TIMESTAMP值是以YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD或YYMMDD格式顯示的,它取決于M是否是14(或省略)、12、8或6,但是允許你以字符串或數字給一個TIMESTAMP列賦值。從MySQL4.1開始,TIMESTAMP以'YYYY-MM-DDHH:MM:DD'格式作為字符返回。如果你你希望以數字形式返回則必須在該時間戳字段后加上+0。不同的時間戳長度是不支持的。從MySQL4.0.12開始,選項--new可以被用來使服務器與4.1一樣運作。TIMESTAMP列有益于記錄一個INSERT或UPDATE操作的日期和時間,因為如果你自己沒有給它賦值,它將被自動地設置為最近一次操作的日期和時間。也可以通過給它賦一個NULL而使它設置為當前的日期和時間。查看章節6.2.2Date和Time類型。參數M只影響一個TIMESTAMP列的顯示格式;它的值總是占用4個字節存儲。注意,當TIMESTAMP(M)列的M是8或14時,它返回的是數字而其它的TIMESTAMP(M)列返回的是字符串。這僅僅是為了可以可靠地轉儲并恢復到其它格式的表中。查看章節6.2.2.2DATETIME、DATE和TIMESTAMP類型。TIME一個時間。范圍是'-838:59:59'到'838:59:59'。MySQL以'HH:MM:SS'格式顯示TIME值,但是允許你使用字符串或數字來給TIME列賦值。查看章節6.2.2.3TIME類型。YEAR[(2|4)]一個2或4位數字格式的年(缺省為4位)。允許的值是1901到2155、0000(4位年格式)以及使用2位格式的1970-2069(70-69)。MySQL以YYYY格式顯示YEAR值,但是允許你使用字符串或數字來給YEAR列賦值。(YEAR類型在MySQL3.22之前不支持。)查看章節6.2.2.4YEAR類型。[NATIONAL]CHAR(M)[BINARY]一個定長的字符串,當存儲時,總是以空格填滿右邊到指定的長度。M的范圍是0到255(在MySQL3.23版本之前為1到255)。當該值被檢索時,尾部空格將被刪除。CHAR值根據缺省的字符集進行忽略大小寫的排索與比較,除非指定了關鍵詞BINARY。NATIONALCHAR(或短形式NCHAR)是以ANSISQL方式定義一個CHAR列,它將使用缺省的字符集。這在MySQL中是默認的。CHAR是CHARACTER的縮寫。MySQL允許以CHAR(0)類型建立一個列。一些老程序運行時必需一個列,卻又并不使用這個列的值,你就不得不為了適應它而建立該列,在這情況下,CHAR(0)將是很有益的。當需要一個列僅保存兩個值時:一個為CHAR(0)(該列沒有定義為NOTNULL),這將僅占用一個比特位來存儲2個值:NULL或""。查看章節6.2.3.1CHAR和VARCHAR類型。CHAR這是CHAR(1)的同義詞。[NATIONAL]VARCHAR(M)[BINARY]一個變長的字符串。注意:尾部的空格在存儲時將會被刪除(這與ANSISQL約規不同)。M的范圍是0到255(在MySQL4.0.2之前的版本中是1到255)。VARCHAR值以大小寫忽略方式進行排索與比較,除非關鍵詞BINARY被指定。查看章節6.5.3.1隱式的列定義變化。VARCHAR是CHARACTERVARYING的縮寫。查看章節6.2.3.1CHAR和VARCHAR類型。TINYBLOBTINYTEXT一個BLOB或TEXT列,最大長度為255(2^8-1)個字符。查看章節6.5.3.1隱式的列定義變化。查看章節6.2.3.2BLOB和TEXT類型。BLOBTEXT一個BLOB或TEXT列,最大長度為65535(2^16-1)個字符。查看章節6.5.3.1隱式的列定義變化。查看章節6.2.3.2BLOB和TEXT類型。MEDIUMBLOBMEDIUMTEXT一個BLOB或TEXT列,最大長度為16777215(2^24-1)個字符。查看章節6.5.3.1隱式的列定義變化。查看章節6.2.3.2BLOB和TEXT類型。LONGBLOBLONGTEXT一個BLOB或TEXT列,最大長度為4294967295(2^32-1)個字符。查看章節6.5.3.1隱式的列定義變化。注意,由于服務器/客戶端的協議以及MyISAM表通常有一個16M每通信包/表行的限制,你仍然不能使用這個類型的整個范圍。查看章節6.2.3.2BLOB和TEXT類型。ENUM('value1','value2',...)一個枚舉類型。一個僅能有一個值的字符串對象,這個值選自值列'value1'、'value2'、...、NULL或特殊的""出錯值。一個ENUM列可以有最大65535不同的值。查看章節6.2.3.3ENUM類型。SET('value1','value2',...)一個集合。一個能有零個或更多個值的字符串對象,其中每個值必須選自值列'value1'、'value2'、...。一個SET列可以有最大64個成員。查看章節6.2.3.4SET類型。MySQL支持所有的ANSI/ISOSQL92數字類型。這些類型包括準確數字的數據類型(NUMERIC、DECIMAL、INTEGER和SMALLINT),也包括近似數字的數據類型(FLOAT、REAL和DOUBLEPRECISION)。關鍵詞INT是INTEGER的同義詞,關鍵詞DEC是DECIMAL的同義詞。NUMERIC和DECIMAL類型被MySQL以同樣的類型實現,這在SQL92標準中是允許的。他們用于保存對準確精度有重要要求的值,例如與金錢有關的數據。當以它們中的之一聲明一個列時,精度和數值范圍可以(通常是)被指定;例如:salaryDECIMAL(5,2)在這個例子中,5(精度(precision))代表重要的十進制數字的數目,2(數據范圍(scale))代表在小數點后的數字位數。在這種情況下,因此,salary列可以存儲的值范圍是從-99.99到99.99。(實際上MySQL在這個列中可以存儲的數值可以一直到999.99,因為它沒有存儲正數的符號)。譯者注:M與D對DECIMAL(M,D)取值范圍的影響類型說明取值范圍(MySQL<3.23)取值范圍(MySQL>=3.23)DECIMAL(4,1)-9.9到99.9-999.9到9999.9DECIMAL(5,1)-99.9到999.9-9999.9到99999.9DECIMAL(6,1)-999.9到9999.9-99999.9到999999.9DECIMAL(6,2)-99.99到999.99-9999.99到99999.99DECIMAL(6,3)-9.999到99.999-999.999到9999.999#在MySQL3.23及以后的版本中,DECIMAL(M,D)的取值范圍等于早期版本中的DECIMAL(M+2,D)的取值范圍。注釋結束:在ANSI/ISOSQL92中,句法DECIMAL(p)等價于DECIMAL(p,0)。同樣的,在執行被允許決定值p的地方,句法DECIMAL等價于DECIMAL(p,0)。MySQL目前還不支持DECIMAL/NUMERIC數據類型的這些變體形式中的任一種。一般來說這并不是一個嚴重的問題,通過明確地控制精度和數值范圍可以得到這些類型的主要功能益處。DECIMAL和NUMERIC值是作為字符串存儲的,而不是作為二進制浮點數,以便保護這些值的十進制精確度。一個字符用于數值的每一位、小數點(如果scale>0)和“-”符號(對于負值)。如果scale是0,DECIMAL和NUMERIC值不包含小數點或小數部分。DECIMAL和NUMERIC值的最大范圍與DOUBLE一致,但是對于一個給定的DECIMAL或NUMERIC列,它的實際范圍可制定該列時的precision或scale限制。當這樣的列被賦給了小數點的位數超過scale所指定的值時,該將根據scale進行四舍五入。當一個DECIMAL或NUMERIC列被賦與一個大小超過指定(或缺省)的precisionandscale的限止范圍時,MySQL以該列范圍的端點值存儲該值。
mysql用什么字段類型,可以保存小數
要求精度高就用decimal
審題錯了...
簡單寫下區別:
float:浮點型,含字節數為4,32bit,數值范圍為-3.4E38~3.4E38(7個有效位)
double:雙精度實型,含字節數為8,64bit數值范圍-1.7E308~1.7E308(15個有效位)
decimal:數字型,128bit,不存在精度損失,常用于銀行帳目計算。(28個有效位)
numberic===decimal
floatf=345.98756f;//結果顯示為345.9876,只顯示7個有效位,對最后一位數四舍五入。
doubled=345.975423578631442d;//結果顯示為345.975423578631,只顯示15個有效位,對最后一位四舍五入。
注:float和double的相乘操作,數字溢出不會報錯,會有精度的損失。
decimaldd=345.545454879.....//可以支持28位,對最后一位四舍五入。
注:當對decimal類型進行操作時,數值會因溢出而報錯。
hive decimal是什么數據類型
Hivedecimal類型,最好指定長度吧。
Hive的decimal類型借鑒于Oracle,decimal(m,n)表示數字總長度為m位,小數位為n位,那么整數位就只有m-n位了。這與MySql是不一樣的,MySql就直接表示整數位為m位了。
如果你在使用Hive的時候發現字段長度不夠,會直接置該字段值為NULL,不會將它截去。
mysql中哪個數據類型不是表示整型
floatdecimal表示實數帶小數位
文章到此結束,如果本次分享的mysql的decimal類型和mysql中decimal的用法的問題解決了您的問題,那么我們由衷的感到高興!
本文鏈接:http://www.wzyaohuidianqi.cn/ke/2216.html
