MySQL LOAD DATA INFILE: works, but unpredictable line terminator

前端 未结 7 920
走了就别回头了
走了就别回头了 2020-12-25 14:58

MySQL has a nice CSV import function LOAD DATA INFILE.

I have a large dataset that needs to be imported from CSV on a regular basis, so this feature is

7条回答
  •  再見小時候
    2020-12-25 15:43

    You can specify line separator as '\n' and remove trailing '\r' separators if necessary from the last field during loading.

    For example -

    Suppose we have the 'entries.txt' file. The line separator is '\r\n', and only after line ITEM2 | CLASS3 | DATE2 the separator is '\n':

    COL1  | COL2   | COL3
    ITEM1 | CLASS1 | DATE1
    ITEM2 | CLASS3 | DATE2
    ITEM3 | CLASS1 | DATE3
    ITEM4 | CLASS2 | DATE4
    

    CREATE TABLE statement:

    CREATE TABLE entries(
      column1 VARCHAR(255) DEFAULT NULL,
      column2 VARCHAR(255) DEFAULT NULL,
      column3 VARCHAR(255) DEFAULT NULL
    )
    

    Our LOAD DATA INFILE query:

    LOAD DATA INFILE 'entries.txt' INTO TABLE entries
    FIELDS TERMINATED BY '|'
    LINES TERMINATED BY '\n'
    IGNORE 1 LINES
    (column1, column2, @var)
    SET column3 = TRIM(TRAILING '\r' FROM @var);
    

    Show results:

    SELECT * FROM entries;
    +---------+----------+---------+
    | column1 | column2  | column3 |
    +---------+----------+---------+
    | ITEM1   |  CLASS1  |  DATE1  |
    | ITEM2   |  CLASS3  |  DATE2  |
    | ITEM3   |  CLASS1  |  DATE3  |
    | ITEM4   |  CLASS2  |  DATE4  |
    +---------+----------+---------+
    

提交回复
热议问题