2013-11-22 37 views
0

與此question類似,我有一個CSV匯率,其精度高達9位小數。用於在MySQL中存儲高精度小數的數據類型

例如:0.5586592184470.0110767.02E-050.00064113820832.46989

我應該使用哪種數據類型的列?

我試圖FLOATDOUBLEDECIMAL(11,11),它們產生的以下警告之一:

  1. 出於對列「列名」範圍值中的行X
  2. 值在行截斷爲列「列名」 X

當我使用SHOW WARNINGS命令。

僅供參考,SQL語句如下(但我想這是不相關):

LOAD DATA LOCAL INFILE 'currency.csv' INTO TABLE the_currency FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (currency_code, currency_buyin, currency_buyout); 

的CSV樣本數據如下:

PHP,41.46218559,0.024118362 
PKR,95.71731228,0.010447431 
PLN,3.2056255,0.311951599 
PYG,4470.011076,0.000223713 
QAR,3.641148462,0.274638623 
RON,3.524472347,0.283730415 
RSD,87.59544136,0.011416119 
RUB,31.41607934,0.031830834 
RWF,626.1686594,0.001597014 
SAR,3.750383024,0.266639432 
SBD,7.130814403,0.140236436 
SCR,13.08102784,0.076446592 
SDG,4.412494807,0.226629162 
SEK,6.683528257,0.149621571 
SGD,1.221878378,0.81841206 
SHP,0.623503208,1.603840987 
SLL,4349.905174,0.00022989 
SOS,1615.486542,0.000619009 
SPL,0.166666667,6 
SRD,3.274628066,0.305378193 
STD,18949.99968,5.28E-05 
SVC,8.75,0.114285714 

MySQL版本:5.5.34-0ubuntu0.12.04.1和我正在使用控制檯命令。

回答

8

如果你想11位以及小數點後之前,您需要DECIMAL(22,11)DECIMAL(11,11)在之前沒有任何數字的存儲空間,甚至幾乎無效。

爲了存儲小數或貨幣值,DECIMALNUMERIC(大致相當)是要走的路。轉換率在概念上有點不同 - 因爲偶爾它們可能會因更廣泛的因素而變化 - 但DECIMAL可能是一個合理的開始位置,因爲至少它可以給出準確的小數運算結果。

替代方案是DOUBLEFLOAT沒有很好的精度),這將允許存儲超膨脹貨幣之間的轉換率;然而,將浮點標度混合到'十進制'數學中需要對輸出進行明確的舍入策略。

+0

似乎我誤解了(不仔細閱讀手冊)'DECIMAL(M,D)'的定義。謝謝! – Raptor

1

十進制是你需要的。參數是長度,然後是小數位。小數(長度,小數點後一位)

例十進制(4,2)=最大值爲99.99 十進制(6,2)= MAX值9999.99

希望這有助於。

相關問題