我是MySQL / SQL的新手,这是我在此网站上的第一篇文章,因此,如果我对这个问题的措辞不好,我深表歉意。

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


  受影响的0行,64个警告:1265列的数据被截断
  第1行的“ ptsg”


错误日志在这里:http://pastie.org/private/byzcwjtslxpfjyhoog2g

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

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

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

我还有其他浮点列可以很好地处理“ 0.347”之类的数据。为什么我的数据被截断?

这是.csv格式的三行数据:

2013掘金,2013,1,丹佛,掘金,丹佛掘金,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
2013尼克斯,2013,2,纽约,尼克斯,纽约尼克斯,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
2013火箭,2013,3,休斯顿,火箭,休斯顿火箭,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
2013太阳,2013,4,菲尼克斯,太阳,菲尼克斯太阳,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;

注释1265第1行的列'ptsg'的数据被截断
注释1265第2行的'ptsg'列的数据被截断
注释1265第3行的'ptsg'列的数据被截断
注释1265第5行的'ptsg'列的数据被截断
...


更新:

多亏了peterm,我注意到我对列“ ptsg”使用的“十进制”数据类型不正确。我使用DECIMAL(10,0)而不是(10,1)。我的64警告已减少至1。

受影响的0行,1警告:1366不正确的十进制值:行1246的'ptsg'列的''记录:1334已删除:0跳过:1334警告:1

第1246行的ptsg为空白。我上面的查询(特别是ptsg = NULLIF(@vptsg,''))应该吗?将1246行的“ NULL”插入ptsg列。我检查了表,由于我未选中“ NN”或“ Not Null”复选框,因此ptsg列DECIMAL(10,1)应该允许使用NULL值。

第1246行看起来像:
1955年的子弹,1955年9月,巴尔的摩,子弹,巴尔的摩子弹,``,,,,,,,,,,,,,,

我在犯另一个愚蠢的错误吗?

最佳答案

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

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

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

  LINES TERMINATED BY '\r\n'

07-24 09:27