簡體   English   中英

MySQL:LOAD DATA LOCAL INFILE添加了額外的字符'\\ r'

[英]MySQL: LOAD DATA LOCAL INFILE adds extra character '\r'

我有一張這樣的桌子:

    CREATE TABLE `tblinquiries` (
  `UID` varchar(50) DEFAULT NULL,
  `ReviewDate` date NOT NULL,
  `InquiryId` varchar(50) DEFAULT NULL,
  `AuditStatus` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`InquiryId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我有一個帶數據的csv文件:

UID,ReviewDate,InquiryId,AuditStatus

UID1,2018-07-06,109814969,Check

UID2,2018-07-06,109866072,Check

UID3,2018-07-06,109911408,Check

UID4,2018-07-06,109798278,Check

我使用以下命令上傳數據:

   $location = '../uploads/';
   $name = $_FILES["file"]["name"];
   $filePath = $location.$name;
   $table = 'tblinquiries';

   LOAD DATA LOCAL INFILE "'.$filePath.'"
   INTO TABLE '.$table.'
   FIELDS TERMINATED by \',\' OPTIONALLY ENCLOSED BY \'"\'
   LINES TERMINATED BY \'\n\'
   IGNORE 1 LINES

它上傳數據,但在第二行添加了額外的字符“ \\ r”。 我導出了數據,結果如下:

('UID4', '2018-07-06', '109798278', 'Check'),
('UID1', '2018-07-06', '109814969', 'Check\r'),
('UID2', '2018-07-06', '109866072', 'Check\r'),
('UID3', '2018-07-06', '109911408', 'Check\r');

運行后:

SELECT AuditStatus, LENGTH(AuditStatus) FROM `tblinquiries`

得到:

AuditStatus LENGTH(AuditStatus)
Check          5
Check          6
Check          6
Check          6

我該如何解決?

我假定您的源數據具有那些\\r控制字符,因為LOAD DATA通常不會將數據添加到源文件中(除非您告訴它這樣做,但實際情況並非如此)。 我們可以嘗試在AuditStatus列上運行RTRIM

LOAD DATA LOCAL INFILE "'.$filePath.'"
INTO TABLE '.$table.'
FIELDS TERMINATED by \',\' OPTIONALLY ENCLOSED BY \'"\'
LINES TERMINATED BY \'\n\'
IGNORE 1 LINES
(UID, ReviewDate, InquiryId, @AuditStatus)
SET AuditStatus = RTRIM(@AuditStatus);

正如@Sloan所建議的,我更改了行終止符,從而解決了該問題。 這是最終代碼。

        LOAD DATA LOCAL INFILE "'.$filePath.'"
        INTO TABLE '.$table.'
        FIELDS TERMINATED by \',\' OPTIONALLY ENCLOSED BY \'"\'
        LINES TERMINATED BY \'\r\n\'
        IGNORE 1 LINES

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM