mysql資料類型double和decimal區別詳解

來源:互聯網
上載者:User

標籤:http   服務   貨幣   cpu   log   字元   targe   精確   點列   

詳見:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt336

 

實數是帶有小數部分的數字。然而,它們不只是為了儲存小數部分,也可以使用

DEClMAL 儲存比 BIGINT還大的整數。 MySQL 既支援精確類型,也支援不精確類型。

FLOAT 和  DOUBLE 類型支援使用標準的渾點運算進行近似計算。如果需要知道浮點運算是

怎麼計算的,則需要研究所使用的平台的浮點數的具體實現。

 

DECIMAL 類型用於儲存精確的小數。在 MySQL 5.0 和更高版本, DECIMAL 類型支援精確 計算。 MySQL 4.1 以及更早版本則使用浮點運算來實現 DECIAML 的計算,這樣做會因為 精度損失導致一些奇怪的結果。在這些版本的   MySQL 中,DEClMAL 只是一個"儲存類型"。

 

因為 CPU 不支援對 DEClMAL 的直接計算,所以在 MySQL 5.0 以及更高版本中, MySQL 伺服器自身實現了 DECIMAL 的高精度計算。相對而言, CPU 直接支援原生浮點計算,所 以浮點運算明顯更快。

 

浮點和 DECIMAL 類型都可以指定精度。對於 DECIMAL 列,可以指定小數點前後所允許的 最大位元。這會影響列的空間消耗。 MySQL 5.0 和更高版本將數字打包儲存到一個二進 制字串中(每 4個位元組存 9個數字)。例如, DEClMAL(18 ,9)小數點兩邊將各儲存 9個 數字,一共使用 9 個位元組:小數點前的數字用 4 個位元組,小數點後的數字用 4 個位元組, 小數點本身占 1個位元組。

 

MySQL 5.0 和更高版本中的 DEClMAL 類型允許最多 65個數字。而早期的 MySQL 版本中 這個限制是254個數字,並且儲存為未壓縮的字串(每個數字一個位元組)。然而,這些(早 期)版本實際上並不能在計算中使用這麼大的數字,因為        DECIMAL 只是一種儲存格式: 在計算中 DEClMAL 會轉換為 DOUBLE 類型。

 

有多種方法可以指定浮點列所需要的精度,這會使得   MySQL 悄悄選擇不同的資料類型, 或者在儲存時對值進行取捨。這些精度定義是非標準的,所以我們建議只指定資料類型, 不指定精度。

 

浮點類型在儲存同樣範圍的值時,通常比 DECIMAL 使用更少的空間。 FLOAT 使用 4個字 節儲存。 DOUBLE 佔用8個位元組,相比 FLOAT有更高的精度和更大的範圍。和整數類型一樣, 能選擇的只是儲存類型 IMySQL 使用 DOUBLE 作為內部浮點計算的類型。

 

因為需要額外的空間和計算開銷,所以應該盡量只在對小數進行精確計算時才使用

DECIMAL一一例如儲存財務資料。但在資料量比較大的時候,可以考慮使用     BIGINT 代替

DECIMAL,將需要儲存的貨幣單位根據小數的位元乘以相應的倍數即可。假設要儲存財

務資料精確到萬分之一分,則可以把所有金額乘以一百萬,然後將結果儲存在  BIGI町裡,

這樣可以同時避免浮點儲存計算不精確和 DECIMAL 精確計算代價高的問題。

 

mysql資料類型double和decimal區別詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.