formato datetime foi alterado entre o mysql 5.0 e 5.1?

5

Eu atualizei um escravo mysql do mysql 5.0 para o mysql 5.1. durante a recuperação, a replicação falhou em uma consulta com valor de data e hora incorreto:

110919 13:56:18 [ERROR] Slave SQL: Error 'Incorrect datetime value: '2010-03-14 02:35:34.0' for column 'creation_date' at row 1' on query.

Eu tentei inserir novamente a consulta, e ela falhou novamente. Depois, corrigi o valor para:

2010-03-14 02:35:34

e a consulta foi aceita.

Como posso definir o mysql para aprovar esses valores de data e hora para evitar problemas futuros?

Meu palpite será que ele foi definido na descrição da tabela e foi redefinido durante o mysql_upgrade.

    
por smintz 20.09.2011 / 14:49

2 respostas

6

O Mysql 5.1 manipula microssegundos da mesma forma que o mysql 5.0, no entanto, microssegundos não podem ser armazenados em uma coluna de qualquer tipo de dado temporal. Qualquer parte de microssegundos é descartada de acordo com o MySQL Doc: link . No entanto, desde que você está recebendo erro com isso, você pode ativar a permissão de datas inválidas usando a configuração do modo sql no mysql.

sql-mode=allow_invalid_dates

em my.cnf ou my.ini (dependendo do seu SO).

link

PS: É surpreendente que a data & tempo que você forneceu em sua pergunta é realmente um tempo inexistente em DST (14 de março de 2010):)

    
por 20.09.2011 / 15:52
0

Você pode ter que definir o datetime_format em my.cnf

Aqui está o que é muito, muito incomum. As variáveis date_format e < um href="http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_datetime_format"> datetime_format estão presentes no MySQL 5 .x:

mysql> select version();
+----------------------+
| version()            |
+----------------------+
| 5.0.81-community-log |
+----------------------+
1 row in set (0.00 sec)

mysql> show variables like 'date%format';
+-----------------+-------------------+
| Variable_name   | Value             |
+-----------------+-------------------+
| date_format     | %Y-%m-%d          |
| datetime_format | %Y-%m-%d %H:%i:%s |
+-----------------+-------------------+
2 rows in set (0.00 sec)

Se você procurá-los na documentação do MySQL, ele diz que eles não são usados. No entanto, para minha surpresa, você pode configurá-los em sua sessão. Aqui está como:

mysql> set date_format = '%Y%m%d';
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'date%format';
+-----------------+-------------------+
| Variable_name   | Value             |
+-----------------+-------------------+
| date_format     | %Y%m%d            |
| datetime_format | %Y-%m-%d %H:%i:%s |
+-----------------+-------------------+
2 rows in set (0.00 sec)

Pergunta: Você pode configurá-lo globalmente? (Este exemplo é o MySQL 5.5.12 no Windows)

mysql> set global date_format = '%Y%m%d';
ERROR 1238 (HY000): Variable 'date_format' is a read only variable

Pelo menos você não pode na linha de comando. Que tal em my.cnf (my.ini) ???

Eu adicionei isso ao my.ini no meu PC

[mysqld]
date_format="%Y%m%d"

reiniciado mysql e tenho isso:

mysql> select version();
+------------+
| version()  |
+------------+
| 5.5.12-log |
+------------+
1 row in set (0.00 sec)

mysql> show variables like 'date%format';
+-----------------+-------------------+
| Variable_name   | Value             |
+-----------------+-------------------+
| date_format     | %Y%m%d            |
| datetime_format | %Y-%m-%d %H:%i:%s |
+-----------------+-------------------+
2 rows in set (0.00 sec)

Embora seja oficialmente não documentado, você pode jogar com o formato a seu critério.

Experimente!

ISENÇÃO DE RESPONSABILIDADE: Se algum dos seus dados de data e hora for capturado ou morto, negarei qualquer conhecimento de suas ações.

    
por 20.09.2011 / 21:31