与此问题类似,我有一个CSV货币汇率,精确到小数点后9位.
例如:0.558659218,4470.011076,7.02E-05,0.000641138,20832.46989
我应该为列使用哪种数据类型?
我想FLOAT,DOUBLE和DECIMAL(11,11)他们产生以下警告之一:
当我使用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);
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
MySQL版本:5.5.34-0ubuntu0.12.04.1我正在使用console命令.
你需要DECIMAL(22,11),如果你想11位之前以及之后的小数位.在小数DECIMAL(11,11)位之前没有任何数字存储,甚至几乎没有效果.
对于存储小数或货币值,DECIMAL或NUMERIC(大致相当)是要走的路.转换率在概念上有点不同 - 因为偶尔它们可以通过更广泛的因素变化 - 但DECIMAL可能是一个合理的起点,因为至少它可以为您提供准确的十进制数学结果.
替代方案是DOUBLE(FLOAT没有非常好的精确度),这将允许存储超高息货币之间的转换率; 但是,将浮点缩放混合到"十进制"数学中需要在输出上使用明确定义的舍入策略.