2013-11-22 4 views
0

question과 비슷하게 소수점 이하 9 자리까지의 통화 비율의 CSV가 있습니다. 예를 들어MySQL에서 고정밀 소수 자릿수를 저장하는 데이터 형식

: 0.558659218, 4470.011076, 7.02E-05, 0.000641138, 나는 컬럼에 사용해야하는 데이터 유형

20832.46989?

는 I, 그들은 다음과 같은 경고 중 하나 생성 FLOAT, DOUBLEDECIMAL(11,11) 시도 : 행에서 열의 COLUMN_NAME '에 대한 범위 값 중

  1. 을 X
  2. 값이 행에서 열의 COLUMN_NAME "잘릴
  3. X

SHOW WARNINGS 명령을 사용할 때.

참고로, SQL 문은 다음과 같다 (그러나 나는 그것이 관련이없는 것 같아요) :

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과 CSV의

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

샘플 데이터는 다음과 같다 나는 콘솔 명령으로 일하고있다. 당신이 11 자리 소수 놓은 후뿐만 아니라 전에 을 원하는 경우

답변

8

당신은 DECIMAL(22,11)이 필요합니다. DECIMAL(11,11)에는 의 자릿수가 저장되지 않으므로 소수점 이하 자수는이며 거의 유효하지 않습니다.

십진수 또는 통화 값을 저장하려면 DECIMAL 또는 NUMERIC (대체로 동등)이 좋습니다. 전환율은 개념적으로 다소 다르기는하지만 훨씬 더 광범위한 요인에 의해 변동될 수 있기 때문에 때때로 DECIMAL은 합리적인 출발점이 될 수 있습니다. 적어도 정확한 십진수 결과를 제공하기 때문입니다.

대안으로 DOUBLE (FLOAT은 정밀도가 좋지 않음)으로, 과도하게 팽창 된 통화 간의 전환율을 저장할 수 있습니다. 그러나 부동 소수점 스케일링을 '소수'수학과 혼합하면 출력에 잘 정의 된 반올림 전략이 필요합니다.

+0

'DECIMAL (M, D)'의 정의를 오해 (매뉴얼을주의 깊게 읽지 않음) 한 것 같습니다. 감사! – Raptor

1

10 진수는 필요한 것입니다. 매개 변수는 길이 다음 소수 자릿수입니다. 소수 (길이, 소수점)

예 소수 (4,2) = 최대 값은 99.99 소수 (6,2)이 최대 값이 도움 = 9999.99

희망이다.

관련 문제