我在处理项目时遇到过这个问题,但这是一个复制“bug”的简单示例......
首先创建一个表,最后一列是某种varchar:
Create table testtable(
ProductName varchar(100),
Color varchar(50),
CategoryID varchar(5)
);
使用数据创建制表符分隔的文本文件:
Shirt Red 1111
Pants Blue 2222
Shoes Green 3333
将数据上传到表格中:
load data infile 'testtable.txt' into table testtable;
我没有任何错误或警告或任何东西。但是,当我尝试查询数据时,它看起来很奇怪:
select * from testtable;
ProductName Color CategoryID
Red 1111
Blue 2222
Shoes Green 3333
将加入ProductName的查询将无效。
接下来,创建一个以int作为最后一列的表:
Create table fixedtable(
ProductName varchar(100),
Color varchar(50),
CategoryID varchar(5),
Inventory int
);
使用数据创建制表符分隔的文本文件:
Shirt Red 1111 10
Pants Blue 2222 15
Shoes Green 3333 20
将数据上传到表格中:
load data infile 'fixedtable.txt' into table fixedtable;
现在桌子看起来很好:
select * from fixedtable;
ProductName Color CategoryID Inventory
Shirt Red 1111 10
Pants Blue 2222 15
Shoes Green 3333 20
我没有尝试使用“插入”或类似的东西复制它;对于这个项目,我特别需要使用“load data infile”语句。
这可能更容易用截图解释,但我缺乏正确的声誉......我想知道是否有其他人在他们的机器上得到这个结果?为了记录,我使用的是Windows 7。
我做错了吗?知道是什么导致了这个吗?
答案 0 :(得分:1)
我可以重现这一点。这种行为很奇怪,我认为MySQL的导入可以“猜测”,当它知道在行末有一个数字时会更好。
我认为问题正在发生,因为你在Windows上,因此文本文件在每行的末尾都有\ r \ n而不是\ n。当您使用没有设置的LOAD DATA INFILE时,它使用默认值,其中行以\ n结尾。来源 - http://dev.mysql.com/doc/refman/5.6/en/load-data.html搜索“如果您未指定FIELDS或LINES子句”。
要修复它,只需指定LINES TERMINATED BY“\ r \ n”部分。例如:
mysql> Create table testtable(
-> ProductName varchar(100),
-> Color varchar(50),
-> CategoryID varchar(5)
-> );
Query OK, 0 rows affected (0.12 sec)
mysql> load data infile 'testtable.txt' into table testtable;
Query OK, 3 rows affected (0.01 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
mysql> SELECT * FROM testtable;
+-------------+-------+------------+
| ProductName | Color | CategoryID |
+-------------+-------+------------+
| | Red | 1111
| | Blue | 2222
| Shoes | Green | 3333 |
+-------------+-------+------------+
3 rows in set (0.00 sec)
mysql> DELETE FROM testtable;
Query OK, 3 rows affected (0.02 sec)
mysql> load data infile 'testtable.txt' into table testtable
-> LINES TERMINATED BY '\r\n';
Query OK, 3 rows affected (0.01 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
mysql> SELECT * FROM testtable;
+-------------+-------+------------+
| ProductName | Color | CategoryID |
+-------------+-------+------------+
| Shirt | Red | 1111 |
| Pants | Blue | 2222 |
| Shoes | Green | 3333 |
+-------------+-------+------------+
3 rows in set (0.00 sec)
所以,你会使用这个SQL:
load data infile 'testtable.txt' into table testtable LINES TERMINATED BY '\r\n';