我已经从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_format和datetime_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时间数据被逮捕或杀死,我会否定任何有关您的行为的知识。