date时间格式在MySQL 5.0和5.1之间改变?

我已经从MySQL 5.0升级到MySQL 5.1的MySQL从属。 在追赶期间,具有错误的date时间值的查询复制失败:

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. 

我试图重新插入查询,并再次失败,然后我将该值固定为:

 2010-03-14 02:35:34 

并接受查询。

我如何设置mysql批准这样的date时间值,以防止未来的问题?

我的猜测是,它被设置在表描述,并在mysql_upgrade期间被重置。

Mysql 5.1以与MySQL 5.0相同的方式操纵微秒,但微秒不能存储到任何时态数据types的列中。 按照Mysql Doc: http : //dev.mysql.com/doc/refman/5.1/en/datetime.html放弃任何微秒部分。 但是,因为你得到这个错误,你可以使用mysql中的sql模式设置启用允许无效的date。

 sql-mode=allow_invalid_dates 

在my.cnf或my.ini(取决于您的操作系统)。

http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html#sqlmode_allow_invalid_dates

PS:令人惊讶的是,您提供的问题中的date和时间实际上是DST中不存在的时间(2010年3月14日):)

您可能必须在my.cnf中设置datetime_format

这是非常非常不寻常的。 MySQL 5.x中提供了variablesdate_formatdatetime_format

 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) 

如果你在MySQL文档中查找它们,它说它们没有被使用。 然而,令我惊讶的是,你可以在你的会议中设置它们。 这里是如何:

 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) 

问题:你能全局设置吗? (这个例子是Windows中的MySQL 5.5.12)

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

至less你不能在命令行上。 那么my.cnf(my.ini)呢?

我把这个添加到我的个人电脑my.ini

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

重新启动MySQL并得到这个:

 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) 

虽然它没有正式的文件,但你可以自由select格式。

试一试 !!!

免责声明:如果您的任何date时间数据被逮捕或杀死,我会否定任何有关您的行为的知识。