我目前使用LOAD DATA LOCAL INFILE導入批量財務數據進行處理。mysql中截斷的DECIMAL值(小數點後30位)
將文件內的值存儲到精確度爲30位小數的位置,例如,
125.154821679413246187945612314846
然而,當此導入,數據總是截斷爲10位小數,與尾隨零,例如
125.154821679200000000000000000000
列設置如下: -
USDPayable DECIMAL (33,30)
編輯:
表創建腳本:
CREATE TABLE IF NOT EXISTS dump
(
SaleID INT NOT NULL AUTO_INCREMENT,
Country VARCHAR(8),
Label VARCHAR(20),
Product VARCHAR(5),
URI VARCHAR(20),
UPC VARCHAR(20),
EAN VARCHAR(20),
ISRC VARCHAR(20),
TrackName VARCHAR(28),
ArtistName VARCHAR(64),
ComposerName VARCHAR(64),
AlbumName VARCHAR(54),
Quantity INT(10),
USDPayable decimal(33,30),
PRIMARY KEY (SaleID)
);
數據加載腳本:
LOAD DATA
LOCAL INFILE '<my file>'
INTO TABLE dump
IGNORE 3 LINES
(Country, Label, Product, URI, UPC, EAN, ISRC,
TrackName, ArtistName, ComposerName, AlbumName,
Quantity, USDPayable)
輸入數據樣本:
BE Label1 product code 00cflHmwefweidJA barcode ISRC ......... 1 0.003872402660862401479116078884
US Label2 product code 00cflHmtyfweidJA barcode ISRC ..........1 0.002220695558213356018688393633
BE Label2 product code 00cflHmwefweidJA barcode ISRC ..........2 0.002137613958913373918420510406
NO Label3 product code 00cflHmjkfweidJA barcode ISRC ..........3 0.02264616748080050066133527663
DE Label4 product code 00cflHmwefweidJA barcode ISRC ..........1 0.003018216435957714580945696704
CO Label5 product code 00cflHmzxfweidJA barcode ISRC ..........1 0.0004178407583000146349569881848
CA Label6 product code 00cflHmwefpoidJA barcode ISRC ..........2 0.01385864190292964399955986534
CA Label7 product code 00cflHmwefmnidJA barcode ISRC ..........1 0.003270121556795672746439239972
IS Label7 product code 00cflHmwefweidJA barcode ISRC ..........8 0.05702767311942350853930831032
TR Label7 product code 00cf09poefweidJA barcode ISRC ..........4 0.009839895102632677068730014884
UPDATE
一段時間後,我決定硬着頭皮 - 和流文件中的行由行使用PHP準備好在插入表之前處理值。使用fgets(),這個值在這裏也被截斷......這就好像mysql和php認爲被截斷的值是文件中正在讀取的文字值。非常容易混淆
嘗試number_format() –
@BilalAhmed你可以擴展一下嗎?如果你的意思是php函數,我希望避免任何預處理(這解釋了使用LOAD DATA LOCAL INFILE),因爲該文件包含數十萬行 – locksem
請考慮編輯你的問題以顯示我們有幾行輸入文件,以及SHOW CREATE TABLE的輸出,無論您嘗試加載哪張表。它看起來像MySQL正在從你的'INFILE'讀取數字,將它們轉換爲其內部本地數字格式 - 雙精度浮點數 - 然後將它們轉換爲十進制數,從而失去精度。您可以嘗試用引號將這些數字包裝起來,這樣'LOAD DATA INFILE'就會假定它們是文本字符串,而不是數字。 –