DECIMAL資料型別更改 MySql資料庫

2021-04-14 01:36:35 字數 1704 閱讀 7298

本節討論了mysql 5.1中decimal資料型別(以及其同義型別)的特性,尤其是下述方面:

·         數字的最大數。

·         儲存格式。

·         儲存要求。

·         對decimal列上界 的非標準mysql擴充套件。

在本節中,對於為較早mysql版本編寫的應用程式,在相應的地方指出了可能的不相容性。

decimal列的宣告語法是decimal(

m,d)。在mysql 5.1中,參量的取值範圍如下:

·         m是數字的最大數(精度)。其範圍為1~65(在較舊的mysql版本中,允許的範圍是1~254)。

·         d是小數點右側數字的數目(標度)。其範圍是0~30,但不得超過m。

對於m,最大值65意味著,對decimal值的計算能精確到65位數字。這種65位數字的精度限制也適用於準確值數值文字,因此,這類文字值的最大範圍不同於以前的範圍(在較早的mysql版本中,十進位制值能達到254位。不過,採用的是浮點計算,因而是近似計算而不是準確計算)。

在mysql 5.1中,採用二進位制格式儲存decimal列的值,將9個十進位制數字打包在4位元組中。對於每個值的整數部分和小數部分,其儲存要求是分別確定的。每9個數字需要4位元組,任何剩餘的數字將占用4位元組的一部分。例如,decimal(18,9)列在小數點的每一側均有9位數字,因此,整數部分和小數部分均需要4位元組。decimal(20,10)列在小數點的每一側均有10位數字。對於每一部分,9位數字需要4位元組,剩餘的1位數字需要1位元組。

在下表中,給出了關於剩餘數字的儲存要求:

剩餘的數字

位元組數0

0 1

1 2

1 3

2 4

2 5

3 6

3 7

4 8

4 9

4 與某些較早的mysql版本不同,在mysql 5.1中,decimal列不儲存前導「+」字元或前導「0」數字。如果將+0003.1插入decimal(5,1)列,將儲存為3.1。為了適應該變化,必須更改依賴於早期行為的應用程式。

在mysql 5.1中,decimal列不允許儲存大於列定義中隱含範圍的值。例如,decimal(3,0)列支援的範圍為-999~999。對於decimal(m,d)列,小數點左側最多允許m –d位數字(它與依賴於早期mysql版本的應用程式不相容,允許儲存額外數字代替「+」號)。

sql標準要求,numeric(m,d)的精度必須準確為m位數字。對於decimal(m,d),標準要求的精度至少為m位數字,但允許更多。在mysql中,decimal(m,d)和numeric(m,d)是相同的,兩者的精度均準確為m位數字。

對於依賴decimal資料型別早期處理方式的應用程式,關於移植這類應用程式的更多資訊,請參見mysql 5.0參考手冊。

MySQL資料型別DECIMAL

decimal 型別不同於float和decimal,其中decimal 實際是以串存放的。decimal 可能的最大取值範圍與double 一樣,但是其有效的取值範圍由m 和d 的值決定。如果改變m 而固定d,則其取值範圍將隨m 的變大而變大。表2 7的前三行說明了這一點。如果固定m 而改變d,則...

MySql 資料型別 decimal詳解

1.首先,對於精度比較高的東西,比如money,我會用decimal型別,不會考慮float,double,因為他們容易產生誤差,numeric和decimal同義,numeric將自動轉成decimal。decimal從 mysql 5.1 引入,列的宣告語法是 decimal m,d 在mysq...

MySQL資料型別 decimal詳解

日期 2013 07 29 字型 大中小 1.首先,對於精度比較高的東西,比如money,我會用decimal型別,不會考慮float,double,因為他們容易產生誤差,numeric和decimal同義,numeric將自動轉成decimal。decimal從 mysql 5.1 引入,列的宣告...