#mysql
#mysql
Вопрос:
Кажется, что все прочитано правильно, но данные не загружены, даже если в файле 6 строк, не считая первой.
mysql> load data infile 'C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\test2.txt' into table orders
-> fields terminated by 't'
-> ENCLOSED BY '"' LINES TERMINATED BY ' n'
-> ignore 1 lines;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Deleted: 0 Skipped: 0 Warnings: 0
Может быть, это может помочь, я добавлю описание моей таблицы и строку файла в качестве примера.
mysql> describe orders;
-------------------------- -------------- ------ ----- --------- -------
| Field | Type | Null | Key | Default | Extra |
-------------------------- -------------- ------ ----- --------- -------
| sys | varchar(100) | YES | | NULL | |
| client | varchar(20) | YES | | NULL | |
| are | int | YES | | NULL | |
| SaleDocument | int | YES | | NULL | |
| item | int | YES | | NULL | |
| salesdoctype | varchar(20) | YES | | NULL | |
| POtype | varchar(15) | YES | | NULL | |
| profitcenter | varchar(15) | YES | | NULL | |
| orderquantity | int | YES | | NULL | |
| quantityunit | varchar(15) | YES | | NULL | |
| material | varchar(100) | YES | | NULL | |
| MLFB | varchar(100) | YES | | NULL | |
| GCK | varchar(30) | YES | | NULL | |
| PCK | varchar(30) | YES | | NULL | |
| description | varchar(100) | YES | | NULL | |
| orderchannelconsolidated | varchar(30) | YES | | NULL | |
| customer | varchar(30) | YES | | NULL | |
| ifa | int | YES | | NULL | |
| salesorg | varchar(100) | YES | | NULL | |
| salesoffice | varchar(100) | YES | | NULL | |
| salesofficename | varchar(100) | YES | | NULL | |
| companycountry | varchar(100) | YES | | NULL | |
| division | varchar(100) | YES | | NULL | |
| divisiondesc | varchar(150) | YES | | NULL | |
| businessunit | varchar(100) | YES | | NULL | |
| createdby | varchar(100) | YES | | NULL | |
| createdon | varchar(100) | YES | | NULL | |
| ordertype | varchar(100) | YES | | NULL | |
| ordervolumeeuro | float | YES | | NULL | |
| eordervolumeeuro | float | YES | | NULL | |
-------------------------- -------------- ------ ----- --------- -------
30 rows in set (0.01 sec)
И строка моего текстового файла выглядит следующим образом (поля заканчиваются табуляцией):
SWP01 100 5180 310799105 1000 ZPCA DFUE P50XE2A 1 Piece 8GF9872 8GF9872 P310 5554 DISTRIBUTION TERMINAL BLOCK 4 POLE 100A EDI 1012229 275091843 50Q0 50Q1 LV Direzionale Italy QA SSI LP (SSI045) SI EP SWE0012S dic 31 2019 12:00 AM eOrder - IDOC 53,89 53,89
Я не нашел решений по всему блогу.
Я попытался решить свою проблему, изменив вкладку на ;
mysql> load data infile 'C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\testcorto.txt' into table orders
-> fields terminated by ';'
-> lines terminated by '\r\n';
ERROR 1265 (01000): Data truncated for column 'ordervolumeeuro' at row 1
Я нашел похожие ошибки в блоге, но без решений.
Я был бы очень благодарен за любую помощь.
Комментарии:
1. Похоже, что ваши опубликованные образцы данных не разделены табуляцией. Я предлагаю вам помассировать файл перед представлением для загрузки данных в файл.
2. Замените DESCRIBE на SHOW CREATE TABLE . Укажите первые 3-4 строки из исходного файла данных (включая пропущенную строку заголовка), где табуляции НЕ заменяются пробелами (или заменяются некоторым исходным символом, которого нет в данных).
3.
LINES TERMINATED BY ' n'
Это неправильно. Избыточное пространство в терминаторе строки.4. исправлено, что результатом является другая ошибка: ОШИБКА 1265 (01000): данные усечены для столбца ‘eordervolumeeuro’ в строке 1.
Ответ №1:
Может быть, у вас проблема с запятой в ordervolumeeuro, eordervolumeeuro
53,89 53,89
попробуйте заменить запятую точкой
load data infile 'C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\testcorto.txt' into table orders
-> lines terminated by 'rn';
-> (@var1, @var2)
-> SET ordervolumeeuro= REPLACE(@var1, ',', '.'), eordervolumeeuro = REPLACE(@var2, ',', '.')
Комментарии:
1. Я знаю, к чему вы клоните, но очевидно, что в файле нет полей, заканчивающихся на ‘;’, а в ‘\ r \ n’ слишком много 2
2. проблема не в , вместо . в 53,89, потому что я попытался изменить его для первой строки, заменив его точкой, и у меня все еще та же ошибка в строке 1, а не в строке 2, как я ожидал
3. пробовали, просто для текста, используя файл с одной строкой без запятой .. (сообщение об ошибке может быть неоднозначным)
4. поля были завершены с помощью; , единственный способ заставить его работать — заменить тип float на varchar, но мне нужны float, а не varchar
5. затем вы сначала импортируете во временную таблицу значение с помощью varchar, а затем с помощью insert select вы можете заполнить целевую таблицу