MySQL选择列搞砸了

时间:2015-09-28 23:50:22

标签: mysql sql csv select

这就是问题所在。

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

CREATE TABLE Users (User TEXT, Pass TEXT, ID TEXT, RegDate TEXT, Email TEXT, Rank TEXT);

我现在有这个数据库

+-----------+------------------+------------+----------+-------------------+------------+
| User      | Pass             | ID         | RegDate  | Email             | Rank       |
+-----------+------------------+------------+----------+-------------------+------------+

我使用

导入了一个csv文件(Users.csv)(UTF-8,PlainText)
load data local infile 'Users.csv' into table Users fields terminated by ',' enclosed by '"' lines terminated by '\n';

该文件的内容是

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

它的回应是

Query OK, 6 rows affected (0.00 sec)
Records: 6  Deleted: 0  Skipped: 0  Warnings: 0

我运行了命令

SELECT * from Users

我得到了这个回复

+-----------+------------------+------------+----------+-------------------+------------+
| 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  |
+-----------+------------------+------------+----------+-------------------+------------+

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

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

2 个答案:

答案 0 :(得分:6)

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

Owner<cr><spaces>|

<cr>返回到同一行的开头,然后打印多个空格和|。这会覆盖User字段的开头。

使用

LINES TERMINATED BY '\r\n'

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

答案 1 :(得分:1)

值得一提的是,user是一个关键字,可能会导致意外行为,而且您的文件内容不是enclosed by '"'

根据OP的要求发布此处。