нет данных, загруженных в таблицу mysql;

#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 вы можете заполнить целевую таблицу