Estou enfrentando um problema ao importar um arquivo .csv para uma tabela MySQL.
mysql> LOAD DATA INFILE '/var/lib/mysql-files/script_output.csv'
REPLACE INTO TABLE incidents columns terminated by ',' optionally
enclosed by '"' ignore 1 lines;
ERROR 1292 (22007): Incorrect datetime value: '2021-08-29T04:18:35Z' for column 'incident_start' at row 1
Mas, posso importar sem problemas com o IGNORE
comando.
mysql> LOAD DATA INFILE '/var/lib/mysql-files/script_output.csv'
IGNORE INTO TABLE incidents columns terminated by ',' optionally
enclosed by '"' ignore 1 lines;
Query OK, 0 rows affected, 809 warnings (0.01 sec) Records: 266 Deleted: 0 Skipped: 266 Warnings: 809
Meu requisito é substituir/atualizar as colunas caso haja alguma atualização nos valores anteriores da tabela.
Estrutura da tabela
+----------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| incident | varchar(12) | NO | PRI | NULL | |
| description | varchar(300) | YES | | NULL | |
| status | varchar(12) | YES | | NULL | |
| urgency | varchar(7) | YES | | NULL | |
| service | varchar(27) | YES | | NULL | |
| trigger | varchar(25) | YES | | NULL | |
| team | varchar(20) | YES | | NULL | |
| incident_start | datetime(6) | YES | | NULL | |
| incident_end | datetime(6) | YES | | NULL | |
| resolved_by | varchar(20) | YES | | NULL | |
+----------------+--------------+------+-----+---------+-------+
Como podemos corrigir o problema de data e hora incorretas ao importar .csv com a opção de substituição?
Eu tenho a solução para isso. Só precisamos remover o modo STRICT_TRANS_TABLES ao fazer o upload do arquivo csv. Podemos usar os comandos abaixo para isso
Pronto, podemos fazer o upload dos dados com REPLACE
Nota: O modo SQL acima precisa ser definido antes de carregar o arquivo na tabela todas as vezes.