为什么我的数据会被截断?

时间:2013-11-09 04:39:14

标签: mysql truncate load-data-infile

我对MySQL / SQL比较陌生,这是我在这个网站上发表的第一篇文章,所以如果我对这个问题说不好,我会道歉。

我将.xlsx文件的副本保存为.csv文件。我正在尝试将该.csv文件中的数据加载到表中。我收到以下错误消息:

  

0行受影响,64警告:1265数据截断列   'ptsg'在第1行

错误记录在此处:http://pastie.org/private/byzcwjtslxpfjyhoog2g

在此查询:http://pastie.org/private/tyzkbyqnuwpsafrjxcetq#6,8,12-13

我尝试使用'ptsg'列数据类型,将其从float更改为十进制,但没有运气。

插入该列的数据最多为4位有效数字,采用“100”或“100.2”之类的形式,最多1位小数。

我有其他浮点列可以正常使用“0.347”等数据。为什么我的数据会被截断?

以下是.csv格式的三行数据:

2013Nuggets,2013,1,Denver,Nuggets,Denver Nuggets,82,19705,3145,6613,0.476,662,1704,0.388,1859,2429,0.765,791,2652,3443,1813,605,352,1157,1719,8811,107.5
2013Knicks,2013,2,New York,Knicks,New York Knicks,82,19780,3140,6867,0.457,765,2081,0.368,1689,2087,0.809,847,2470,3317,1757,625,475,1123,1743,8734,106.5
2013Rockets,2013,3,Houston,Rockets,Houston Rockets,82,19880,3170,6975,0.454,677,1843,0.367,1668,2083,0.801,962,2549,3511,1955,581,371,1110,1641,8685,105.9
2013Suns,2013,4,Phoenix,Suns,Phoenix Suns,82,20005,3219,6844,0.47,701,1857,0.377,1472,1939,0.759,821,2478,3299,1945,545,357,1169,1666,8611,105

查询输出:SHOW WARNINGS;

Note    1265    Data truncated for column 'ptsg' at row 1
Note    1265    Data truncated for column 'ptsg' at row 2
Note    1265    Data truncated for column 'ptsg' at row 3
Note    1265    Data truncated for column 'ptsg' at row 5
...

更新:

感谢peterm,我发现我对“ptsg”列错误地使用了“decimal”数据类型。我使用DECIMAL(10,0)而不是(10,1)。我的64个警告已减少到1个。

0行受影响,1警告:1366错误的十进制值:''列'ptsg'在第1246行记录:1334删除:0跳过:1334警告:1

第1246行有ptsg的空白。我上面的查询(具体来说,ptsg = NULLIF(@vptsg,''))应该?将第1246行的“NULL”插入到ptsg列中。我检查了表,并且ptsg列DECIMAL(10,1)应该允许NULL值,因为我没有选中“NN”或“Not Null”复选框。

第1246行看起来像: 1955Bullets,1955,9,巴尔的摩,子弹队,巴尔的摩子弹队,,,,,,,,,,,,,,,,,,,,,,,

我又犯了一个愚蠢的错误吗?

1 个答案:

答案 0 :(得分:0)

尝试在最后一列之后在csv文件的每一行上添加一个尾随逗号。 (或者只是几行作为测试。)

我认为问题是你的csv中的最后一个字段没有用逗号终止,这导致将NULL分配给@vptsg

如果文件是DOS格式,您也可以尝试指定

  LINES TERMINATED BY '\r\n'