2013-11-09 3 views
0

Я относительно новичок в 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 
... 

UPDATE:

Благодаря 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» или «Нет Null».

Row 1246 выглядит следующим образом: 1955Bullets, 1955,9, Балтимор, Пули, Балтимор Пули ,,,,,,,,,,,,,,,,,,,,,

Могу ли я сделать другая глупая ошибка?

+0

Прочитайте это и вставьте выход на свой вопрос: http://dev.mysql.com/doc/refman/5.7/ru/show-warnings.html –

+0

Пожалуйста, покажите пару строк, упомянутых в предупреждениях (например, 1 и 2). – peterm

+0

. Какими данными является этот столбец «ptsg»? – bksi

ответ

0

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

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

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

LINES TERMINATED BY '\r\n' 
+0

Я ценю ваши усилия и это предложение. Однако мой .csv-файл был создан из файла .xlsx. Есть ли другое решение, в котором мне не пришлось бы переделывать промежуточный продукт, файл .csv, но вместо этого исправлять ситуацию с помощью лучшего/правильного SQL-запроса? – user2205916

Смежные вопросы