Почему мои данные усекаются?

Я относительно новичок в 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», безуспешно меняя его с плавающей на десятичную.

Данные, которые вставляются в этот столбец, состоят не более чем из 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(10,0) вместо (10,1). Мои 64 предупреждения были уменьшены до 1.

Затронуто 0 строк, 1 предупреждение(я): 1366 Неверное десятичное значение: ' ' для столбца 'ptsg' в строке 1246 Записей: 1334 Удалено: 0 Пропущено: 1334 Предупреждений: 1

В строке 1246 есть пробел для ptsg. Мой запрос выше (в частности, ptsg = NULLIF(@vptsg,'')) должен? вставить "NULL" для строки 1246 в столбец ptsg. Я проверил таблицу, и столбец ptsg, DECIMAL(10,1), должен допускать значения NULL, так как я оставил флажок «NN» или «Not Null» снятым.

Строка 1246 выглядит так: 1955Bullets,1955,9,Baltimore,Bullets,Baltimore Bullets,,,,,,,,,,,,,,,,,,,,

Я делаю еще одну глупую ошибку?


person user2205916    schedule 09.11.2013    source источник
comment
Прочтите это и вставьте вывод в свой вопрос: dev.mysql. com/doc/refman/5.7/en/show-warnings.html   -  person Mosty Mostacho    schedule 09.11.2013
comment
Пожалуйста, покажите пару строк, которые упоминаются в предупреждениях (например, 1 и 2)   -  person peterm    schedule 09.11.2013
comment
Какие данные содержит этот столбец «ptsg»?   -  person bksi    schedule 09.11.2013
comment
Как уже упоминалось, нам нужно знать особенности типа данных, но также возможно, что значения отрицательные, а столбец равен unsigned, хотя это может привести к немного другой ошибке данных. Все еще стоит проверить   -  person helion3    schedule 09.11.2013
comment
Редактируйте свой вопрос и поместите в него данные или используйте внешний ресурс, как вы сделали с pastie.org и разместите ссылку в своем вопросе   -  person peterm    schedule 09.11.2013
comment
И какой точный тип данных для столбца ptsg в таблице summary2?   -  person peterm    schedule 09.11.2013


Ответы (1)


Попробуйте добавить запятую после последнего столбца в каждой строке CSV-файла. (Или просто пару строк в качестве теста.)

Я думаю, проблема в том, что последнее поле в вашем csv не заканчивается запятой, и это приводит к тому, что NULL назначается @vptsg.

Если файл находится в формате DOS, вы также можете попробовать указать

  LINES TERMINATED BY '\r\n' 
person spencer7593    schedule 09.11.2013
comment
Я ценю ваши усилия и это предложение. Однако мой файл .csv был сгенерирован из файла .xlsx. Есть ли другое решение, при котором мне не пришлось бы возиться с промежуточным продуктом, файлом .csv, а вместо этого исправить ситуацию с помощью лучшего/правильного SQL-запроса? - person user2205916; 09.11.2013