0

我对 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”列数据类型,将其从浮点数更改为十进制,但没有运气。

插入该列的数据最多为 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,81 ,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,8658 ,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 列。我检查了表格,并且 ptsg 列 DECIMAL(10,1) 应该允许 NULL 值,因为我没有选中“NN”或“Not Null”复选框。

第 1246 行看起来像: 1955Bullets,1955,9,Baltimore,Bullets,Baltimore Bullets,,,,,,,,,,,,,,,,,,,,,

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

4

1 回答 1

0

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

我认为问题在于 csv 中的最后一个字段没有以逗号结尾,这导致 NULL 被分配给@vptsg.

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

  LINES TERMINATED BY '\r\n' 
于 2013-11-09T05:49:29.693 回答