MySQL选择列搞砸了

meo*_*cat 3 mysql sql csv select

这是问题所在.

首先,我在MySQL中创建了一个数据库

CREATE TABLE Users (User TEXT, Pass TEXT, ID TEXT, RegDate TEXT, Email TEXT, Rank TEXT);
Run Code Online (Sandbox Code Playgroud)

我现在有这个数据库

+-----------+------------------+------------+----------+-------------------+------------+
| User      | Pass             | ID         | RegDate  | Email             | Rank       |
+-----------+------------------+------------+----------+-------------------+------------+
Run Code Online (Sandbox Code Playgroud)

我使用导入了一个csv文件(Users.csv)(UTF-8,PlainText)

load data local infile 'Users.csv' into table Users fields terminated by ',' enclosed by '"' lines terminated by '\n';
Run Code Online (Sandbox Code Playgroud)

该文件的内容是

arinerron,asdfasdf,USR0000001,92082015,arinesaugmail,Owner
looy,asdfasdf,USR0000002,92082015,tjesaugmail,User
mooncat39,marsisawesome,USR0000003,92082015,harveyfamilygmail,Owner
Goldy,foxythepirate777,USR0000004,92082015,goldyftwgmail,User
Reid,reidyreid,USR0000005,92082015,reidgmail,Moderator
Bo,bobobobo,USR0000006,92082015,bobogmail,Moderator
Run Code Online (Sandbox Code Playgroud)

它的回应是

Query OK, 6 rows affected (0.00 sec)
Records: 6  Deleted: 0  Skipped: 0  Warnings: 0
Run Code Online (Sandbox Code Playgroud)

我跑了命令

SELECT * from Users
Run Code Online (Sandbox Code Playgroud)

我得到了这个回应

+-----------+------------------+------------+----------+-------------------+------------+
| User      | Pass             | ID         | RegDate  | Email             | Rank       |
+-----------+------------------+------------+----------+-------------------+------------+
     |erron | asdfasdf         | USR0000001 | 92082015 | arinesaugmail     | Owner
      |     | asdfasdf         | USR0000002 | 92082015 | tjesaugmail       | User
     |cat39 | marsisawesome    | USR0000003 | 92082015 | harveyfamilygmail | Owner
      |     | foxythepirate777 | USR0000004 | 92082015 | goldyftwgmail     | User
 |Reid      | reidyreid        | USR0000005 | 92082015 | reidgmail         | Moderator
| Bo        | bobobobo         | USR0000006 | 92082015 | bobogmail         | Moderator  |
+-----------+------------------+------------+----------+-------------------+------------+
Run Code Online (Sandbox Code Playgroud)

这有什么问题?为什么格式不正确?Rank列也搞砸了

我一遍又一遍地重复这些步骤但没有成功.我真的需要尽快解决这个问题.非常感谢!

Bar*_*mar 8

您的文件具有Windows CR-LF行结尾,而不是Unix LF行结尾.所以这些Rank字段最后都有一个CR字符.所以发生的事情是最后一个字段被打印为:

Owner<cr><spaces>|
Run Code Online (Sandbox Code Playgroud)

<cr>返回到同一行的开头,那么它打印一些空间和|.这会覆盖该User字段的开头.

使用

LINES TERMINATED BY '\r\n'
Run Code Online (Sandbox Code Playgroud)

或者dos2unix在加载之前使用从文件中删除所有CR字符.

  • ..怎么会让第一行中的第一个字段搞乱? (2认同)
  • 最后一个字段中的CR在打印空格之前返回到行的开头,在结尾处返回"|",因此它们会覆盖第一个字段的开头. (2认同)
  • 名为`user`的列没有问题,这种更改是不必要的. (2认同)
  • 你在查询中的任何地方也没有"user"这个词,那么它怎么可能成为一个保留字呢? (2认同)