我是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'