Estou usando o MySQL 5.6 e tenho um programa que executa a seguinte instrução SQL no meu banco de dados:
UPDATE `m_table` SET `s_time` = '2013-08-25T17:00:00+00:00' WHERE id = '123'
Infelizmente, recebo o seguinte erro: Valor de data e hora incorreto: '2013-08-25T17:00:00+00:00' para a coluna 's_time' na linha 1
O tipo de dados para s_time é DateTime.
Eu já tentei definir a propriedade allow_invalid_dates usando o workbench.
Alguém pode entender e por favor me explicar esse erro? Eu sei que se eu alterar manualmente a instrução para UPDATE m_table
SET s_time
= '2013-08-25 17:00:00' WHERE id = '123', a instrução funciona.
Infelizmente, não posso modificar o programa que fornece a instrução SQL (que me disseram ser válida pelo criador do programa) e também não consigo entender o que o +00:00 simboliza.
Obrigado
Este é um valor de data e hora iso-8601 válido , mas não é um literal de data e hora do MySQL válido . Nesse ponto, o desenvolvedor está incorreto.
A documentação explica o que
ALLOW_INVALID_DATES
faz:Em outras palavras,
2013-02-31
seria uma data permitida seallow_invalid_dates
for definida. Esta opção não faz nada quando a data ou a data e hora não estão em um formato válido para o MySQL.O
+00:00
é o deslocamento do fuso horário do UTC . Nesse caso, a hora expressa está em UTC, portanto, o deslocamento é zero horas, zero minutos.Sua solução seria remover o
STRICT_TRANS_TABLES
padrãosql_mode
do arquivo de configuração criado durante o processo de instalação do MySQL 5.6... você precisa considerar cuidadosamente as implicações de mudar isso, mas permite que os dados entrem.