quinta-feira, 21 de setembro de 2017

MySQL - Data truncation: Incorrect datetime value

Verificação do erro  com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'COLUMN_NAME' at row 1.

O erro é gerado ao inserir informações em uma determinada tabela do banco de dados MySQL, cujo o campo da Coluna não aceita o valor que está sendo inserido.
Vejamos os exemplos de como resolver o problema:



-- Primeiramente vamos conectar no ambiente de banco de dados MySQL:

root@serverexemplo:/var/run/mysqld#> mysql -u root --password=********


-- Verificar bancos de dados:
mysql> show databases;
+-------------------------+
| Database                    |
+-------------------------+
| information_schema |
| adm                           |
| prod                           |
| mysql                         |
| performance_schema |
| test                              |
+--------------------------+
9 rows in set (0.00 sec)


-- Conectar no banco de dados PROD:
mysql> use prod


-- Verificar versão do banco de dados PROD:
mysql> SHOW VARIABLES LIKE "%version%";
+--------------------------------+---------------------------------------------+
| Variable_name                    | Value                                                   |
+--------------------------------+---------------------------------------------+
| innodb_version                   | 5.6.36                                                  |
| protocol_version                 | 10                                                        |
| slave_type_conversions      |                                                             |
| version                                | 5.6.36                                                  |
| version_comment               | MySQL Community Server (GPL)    |
| version_compile_machine  | x86_64                                                |
| version_compile_os            | Linux                                                  |
+--------------------------------+---------------------------------------------+
7 rows in set (0.01 sec)


-- Verificar geração de LOG do ambiente de banco de dados PROD :
mysql> SHOW VARIABLES LIKE "general_log%";
+--------------------+---------------------------------+
| Variable_name    | Value                                   |
+--------------------+---------------------------------+
| general_log         | OFF                                     |
| general_log_file  | /var/lib/mysql/fsvrlx06.log |
+------------------+-----------------------------------+


-- Habilitar geração de LOG para apoiar análise do problema:
mysql> SET GLOBAL general_log = 'ON';
mysql> SHOW VARIABLES LIKE "general_log%";
+--------------------+---------------------------------+
| Variable_name    | Value                                   |
+--------------------+---------------------------------+
| general_log         | ON                                      |
| general_log_file  | /var/lib/mysql/fsvrlx06.log |
+------------------+-----------------------------------+

-- Criação de tabela de Backup para testes:
mysql> create table TABLE_EXAMPLO as SELECT * FROM TABLE_EXAMPLE_BACKUP;
Query OK, 2163 rows affected (1.12 sec)
Records: 2163  Duplicates: 0  Warnings: 0


-- Validar Descrição da tabela de Backup Criada:
mysql> desc TABLE_EXAMPLE_BACKUP;
+---------------------------+--------------+------+-----+---------+-------+
| Field                             | Type            | Null | Key | Default | Extra |
+---------------------------+--------------+------+-----+---------+-------+
| PROJECT_ID              | int(11)         | NO   |         | NULL    |       |
| PROJECT_NAME      | varchar(255)| NO   |        | NULL    |       |
| PROJECT_DESCRIPTION | varchar(255) | NO| | NULL    |       |
| PROJECT_TYPE        | int(11)          | NO   |        | NULL    |       |
| USER_ID                     | varchar(36)  | NO   |        | NULL    |       |
| GROUP_ID                  | varchar(36) | NO   |         | NULL    |       |
| MANAGERGROUP_ID | varchar(36) | NO|         | NULL    |       |
| TASK_ID                      | int(11)         | NO   |         | NULL    |       |
| DATE_CREATED        | bigint(20)    | NO   |         | NULL    |       |
| PUBLISH_TAG            | int(11)         | NO   |         | NULL    |       |
| PROJECT_PUBLISHDATE| datetime | YES  |      | NULL    |       |
| PROJECT_PUBLISHED_BY | varchar(36)  | NO | | NULL  |       |
| PROJECT_PUBLISHED_BY_NAME | varchar(255) | YES||NULL||
| USER_NAME               | varchar(128) | YES  |     | NULL    |       |
| GROUP_NAME            | varchar(128) | YES  |     | NULL    |       |
| MANAGERGROUP_NAME | varchar(128) | YES|| NULL  |       |
+---------------------------+--------------+------+-----+---------+-------+
16 rows in set (0.00 sec)


-- Execução de testes na Tabela nova para Simulação do ERRO:
mysql> INSERT INTO TABLE_EXEMPLO_BACKUP (PUBLISH_TAG,PROJECT_ID,PROJECT_NAME,PROJECT_PUBLISHDATE,PROJECT_PUBLISHED_BY,PROJECT_PUBLISHED_BY_NAME,USER_ID,USER_NAME,GROUP_ID,GROUP_NAME,MANAGERGROUP_ID,MANAGERGROUP_NAME,PROJECT_DESCRIPTION,DATE_CREATED,PROJECT_TYPE,TASK_ID) VALUES (2163,4,'Offline','2017-09-21 15:49:TT','123-abc-1234-abcd','Admin ','123-abc-1234-abcd','Admin ','123-abc-1234-abcd','Users','123-abc-1234-abcd','Projectmanagers','The Offline Project',11111111111111,0,4);
Query OK, 1 row affected, 1 warning (0.02 sec)

mysql> show warnings;
+-----------+-------+-------------------------------------------------------------------------------+
| Level       | Code | Message                                                                                            |
+-----------+-------+-------------------------------------------------------------------------------+
| Warning  | 1265  | Data truncated for column 'PROJECT_PUBLISHDATE' at row 1 |
+-----------+-------+-------------------------------------------------------------------------------+
1 row in set (0.00 sec)



#### SOLUÇÃO
Como podemos observar nos testes acima, o erro ocorre na coluna PROJECT_PUBLISHDATE, portanto, vamos alterar o tipo do campo da COLUNA para o datatype aceitável, conforme abaixo:

Alteração do Datatype da coluna PROJECT_PUBLISHDATE de DATETIME para BIGINT

ALTER TABLE NEW_CMS_BACKUP_PROJECTS MODIFY PROJECT_PUBLISHDATE BIGINT;

-- Validar Descrição da tabela de Backup após alteração:
mysql> desc TABLE_EXAMPLE_BACKUP;
+---------------------------+--------------+------+-----+---------+-------+
| Field                             | Type            | Null | Key | Default | Extra |
+---------------------------+--------------+------+-----+---------+-------+
| PROJECT_ID              | int(11)         | NO   |         | NULL    |       |
| PROJECT_NAME      | varchar(255)| NO   |        | NULL    |       |
| PROJECT_DESCRIPTION | varchar(255) | NO| | NULL    |       |
| PROJECT_TYPE        | int(11)          | NO   |        | NULL    |       |
| USER_ID                     | varchar(36)  | NO   |        | NULL    |       |
| GROUP_ID                  | varchar(36) | NO   |         | NULL    |       |
| MANAGERGROUP_ID | varchar(36) | NO|         | NULL    |       |
| TASK_ID                      | int(11)         | NO   |         | NULL    |       |
| DATE_CREATED        | bigint(20)    | NO   |         | NULL    |       |
| PUBLISH_TAG            | int(11)         | NO   |         | NULL    |       |
| PROJECT_PUBLISHDATE|bigint(20)| YES  |      | NULL    |       |
| PROJECT_PUBLISHED_BY | varchar(36)  | NO | | NULL  |       |
| PROJECT_PUBLISHED_BY_NAME | varchar(255) | YES||NULL||
| USER_NAME               | varchar(128) | YES  |     | NULL    |       |
| GROUP_NAME            | varchar(128) | YES  |     | NULL    |       |
| MANAGERGROUP_NAME | varchar(128) | YES|| NULL  |       |
+---------------------------+--------------+------+-----+---------+-------+
16 rows in set (0.00 sec)


-- Executar o insert novamente na tabela após o ajuste:
mysql> INSERT INTO TABLE_EXEMPLO_BACKUP (PUBLISH_TAG,PROJECT_ID,PROJECT_NAME,PROJECT_PUBLISHDATE,PROJECT_PUBLISHED_BY,PROJECT_PUBLISHED_BY_NAME,USER_ID,USER_NAME,GROUP_ID,GROUP_NAME,MANAGERGROUP_ID,MANAGERGROUP_NAME,PROJECT_DESCRIPTION,DATE_CREATED,PROJECT_TYPE,TASK_ID) VALUES (2163,4,'Offline','2017-09-21 15:49:TT','123-abc-1234-abcd','Admin ','123-abc-1234-abcd','Admin ','123-abc-1234-abcd','Users','123-abc-1234-abcd','Projectmanagers','The Offline Project',11111111111111,0,4);
Query OK, 1 row affected (0.00 sec)

Pronto, insert realizado com sucesso.
Agora só realizar o mesmo ajuste na tabela definitiva.

Espero que tenha ajudado.
Qualquer dúvida, deixe seu comentário.

Abraço.

Nenhum comentário:

Postar um comentário