我正在嘗試將 .csv 檔案加載到我的 SQL 表中,但其中一列的資料位于多行,并且由于某種原因 SQL 不喜歡這樣。我附上了一張我的資料如下所示的圖片,我正在使用以下命令加載資料:
load data local infile 'Users/.../info.csv'
into table spell_info fields terminated by ','
enclosed by ' ' lines terminated by '\n';
由于某種原因,它只加載第一行,基本上它似乎只是彈出第一項。它給我的回應是
1 行受影響,1 個警告:1265 第 1 行的列“spellInfo”的資料被截斷記錄:1 已洗掉:0 跳過:0 警告:1
任何幫助表示贊賞。我不確定這是列出 csv 檔案中資訊的方式,還是我的命令,或者兩者的某種組合。

uj5u.com熱心網友回復:
如果要匯入的檔案每條記錄使用多于一行,那么您有很多變體如何正確匯入資料。我將描述其中的 2 個。
變體 1。
該檔案被加載到下一個結構的臨時表中:
CREATE TEMPORARY TABLE tmp (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
raw_data TEXT
);
檔案被加載到這個表中,整行被匯入到一列中。喜歡
LOAD DATA INFILE 'filename.ext'
INTO TABLE tmp
FIELDS TERMINATED BY '' -- or use terminating char which is absent in the file
LINES TERMINATED BY '\n' -- use correct lines terminator
(raw_data);
自動增量列根據它們的加載順序列舉行,即根據它們在檔案中的所有權。
加載資料后,您可以處理這些資料并將資料保存到作業表中。如果每條記錄的行數是靜態的,那么您可以將 temptable 中的行分組(id - 1) MOD @rows_per_record并從組中的確定行中提取每個單獨的列。或者您可以加入相應的行數t1.id = t2.id-1 = t3.id-2 = .. AND (tN.id MOD @rows_per_record)=0。如果記錄資料可能占用可變數量的行,則遞回 CTE 或迭代程序可能是唯一的選擇。
變體 2。
您LOAD DATA以相同的方式使用 with 輸入預處理,但將整行加載到用戶定義的變數中。在 SET 子句中,您將加載的值連接到從前一行加載中保存的一個(在另一個變數中)并檢查該行是否完整。如果是這樣,那么您提取值并將它們保存到列中,并清除收集資料的變數,如果不是,那么您用假但正確的值填充列。加載檔案后,您只需洗掉帶有假值的行。
如果檔案不是很大,那么您可以將整個檔案加載到一個用戶定義的變數(使用LOAD_FILE()函式)中,然后將其決議為單獨的記錄和列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/481834.html
