导入随机行中具有空值的特定CSV文件时出现MySQL问题

时间:2016-02-03 02:21:04

标签: mysql csv

我之前提到过这件事,但在做了一些研究之后,我意识到我在找错了地方。情况就是这样。我创建了这个表:

CREATE TABLE PC_Contacts
(
POC VARCHAR(255) PRIMARY KEY NOT NULL,
Phone_1 VARCHAR(255),
Phone_2 VARCHAR(255)
);

我将一个CSV文件导入MySQL,其中包含我的表PC_Contacts的值:

USE Network
LOAD DATA INFILE 'C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads\\PC_Contacts.csv'
INTO Table PC_Contacts
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

导入后的输出如下所示:

+------------------+--------------+---------------+
| POC              | Phone_1      | Phone_2       |
+------------------+--------------+---------------+
 |April Wilson    | 123-456-5000 | 123-456-5006
             |     | 123-456-2222 |
             |     | 123-456-5331 |
             |     | 123-456-7772 |
 |Anton Watson  | 123-456-1258 | 123-456-6005
 |Elisa Kerring   | 123-456-1075 | 123-456-4475

现在您可能还记得,根据我的代码输入,POC是PK。在原始CSV文件中,我有每行的值。但是,如您所见,右侧没有任何值的任何内容都会影响左列的值。但是,如果我查看GUI并在那里拉出表格,它会显示该单元格中填充了值,因此数据就在那里。如果我要放入xxx-xxx-xxxx,它将解决问题:

    +------------------+--------------+---------------+
    | POC              | Phone_1      | Phone_2       |
    +------------------+--------------+---------------+
     |April Wilson    | 123-456-5000 | 123-456-5006
     |Nicky Nite        | 123-456-2222 | xxx-xxx-xxxx
     |Nicole           | 123-456-5331 | xxx-xxx-xxxx
     |Becky            | 123-456-7772 | xxx-xxx-xxxx
     |Anton Watson  | 123-456-1258 | 123-456-6005
     |Elisa Kerring   | 123-456-1075 | 123-456-4475

显然我的意图是这样我可以在不必在命令行中应用特殊格式的情况下看到该值。可能有一个特殊的SELECT命令吗?

这是指向.CSV的一部分的链接,如下所示:

UTF-8 coding in Python

1 个答案:

答案 0 :(得分:3)

Your CSV file contains a carriage return with newline at the end of row, which breaks formatting. Use:

SELECT POC, Phone_1, REPLACE(Phone_2, '\r', '') AS Phone_2 FROM PC_Contacts;

Or change your import query as follows:

USE Network
LOAD DATA INFILE 'C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads\\PC_Contacts.csv'
INTO Table PC_Contacts
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 ROWS;

And use simple SELECT:

SELECT * FROM PC_Contacts;