我已经将 mysql 从属服务器从 mysql 5.0 升级到 mysql 5.1。在追赶过程中,由于日期时间值不正确的查询导致复制失败:
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 来批准此类日期时间值以防止将来出现问题?
我的猜测是它是在表描述中设置的,并在 mysql_upgrade 期间被重置。
答案1
Mysql 5.1 操作微秒的方式与 mysql 5.0 相同,但是微秒不能存储在任何时间数据类型的列中。任何微秒部分都将被丢弃,如 Mysql Doc 所述:http://dev.mysql.com/doc/refman/5.1/en/datetime.html。但是,由于您遇到了此错误,您可以使用 mysql 中的 sql 模式设置启用允许无效日期。
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
附言:令人惊讶的是,您在问题中提供的日期和时间实际上是夏令时中不存在的时间(2010 年 3 月 14 日):)
答案2
您可能必须在 my.cnf 中设置 datetime_format
这是非常非常不寻常的。变量日期格式和日期时间格式存在于 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)
如果你在 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
至少在命令行上你不能这样做。那么在 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)
尽管官方并未记录该格式,但您可以根据自己的判断使用该格式。
试一试 !!!
免责声明:如果您的任何日期时间数据被捕获或删除,我将否认对您的行为知情。