有效日期时间值的奇怪MySQL警告1264

有效日期时间值的奇怪MySQL警告1264,mysql,datetime,warnings,mysql-error-1264,Mysql,Datetime,Warnings,Mysql Error 1264,我已经在命令行手动输入了一个MySQL命令,我收到了一个我甚至都无法理解的警告。(在任何人开口之前,是的,我知道:1.使用命令行界面不是最好的方法;2.我的表没有命名为“table_NAME”,我的列没有命名为“DateColumn”,我的RecordID值不是真正的“1234”;3.我的列类型可能应该是TIMESTAMP,但现在不是。继续…) 试图输入日期“2012年7月26日下午2:27(GMT)”的值,我键入: mysql> update TABLE_NAME set DateCol

我已经在命令行手动输入了一个MySQL命令,我收到了一个我甚至都无法理解的警告。(在任何人开口之前,是的,我知道:1.使用命令行界面不是最好的方法;2.我的表没有命名为“table_NAME”,我的列没有命名为“DateColumn”,我的RecordID值不是真正的“1234”;3.我的列类型可能应该是TIMESTAMP,但现在不是。继续…)

试图输入日期“2012年7月26日下午2:27(GMT)”的值,我键入:

mysql> update TABLE_NAME set DateColumn="2012-07-26 14:27:00" where RecordID="1234";
mysql> show warnings;
+---------+------+-----------------------------------------------------+
| Level   | Code | Message                                             |
+---------+------+-----------------------------------------------------+
| Warning | 1264 | Out of range value for column 'DateColumn' at row 1 |
+---------+------+-----------------------------------------------------+
我收到:

Query OK, 1 row affected, 1 warning (0.11 sec) 
Rows matched: 1  Changed: 1  Warnings: 1
因此,我键入:

mysql> update TABLE_NAME set DateColumn="2012-07-26 14:27:00" where RecordID="1234";
mysql> show warnings;
+---------+------+-----------------------------------------------------+
| Level   | Code | Message                                             |
+---------+------+-----------------------------------------------------+
| Warning | 1264 | Out of range value for column 'DateColumn' at row 1 |
+---------+------+-----------------------------------------------------+
奇怪,我想。因此,我首先检查表以确认列(字段)类型:

但该值确实正确写入数据库,而不是被截断,AFAIK:

mysql> select * from TABLE_NAME where RecordID="1234";

+-----------------------------------------------+
| RecordID | Date_Column         | BlahBlahBlah |
+----------+---------------------+--------------+
|     1234 | 2012-07-26 14:27:00 | something..  | 
+----------+---------------------+--------------+
我已经在StackOverflow.com上搜索了解决方案。我已经在谷歌上搜索了一个解释。我已经读过了,上面写着:

    MySQL retrieves and displays DATETIME values in 'YYYY-MM-DD HH:MM:SS' format. The supported range is '1000-01-01 00:00:00' to '9999-12-31 23:59:59'. 
我甚至有点怀疑这与我进入的日期或时间有关;因此,我将声明数据库所在的服务器位于太平洋夏令时(GMT-8,现在GMT-7用于DST除外);我从EDT上的客户机登录(SSH)(这不重要);我将所有日期列值存储为GMT。在我输入值“2012-07-26 14:27:00”时,所有三个日期都在2012年7月30日之后。这并不重要——我应该能够输入未来的日期而不会出错——但我认为知道这一点可能会对您有所帮助。所以——

为什么,哦,为什么“2012-07-26 14:27:00”的值超出范围?

我的MySQL客户端API版本是5.1.49


这是我第一次在StackOverflow上发布帖子。提前感谢您的建议

我想知道它是否正在将字符串转换为某种日期格式。这样,dateformat的精度就会太高,从而被截断。在分配之前,请尝试将其强制转换为日期时间

“支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。“因此我认为您的值没有问题……您正在运行哪个版本的MySQL?@Throdne MySQL>select version();version()5.1.56-logi我不能100%确定这是否正确,但您可能需要查看“str_to_date”mysql命令。昨晚我在寻找解决方案,但没能完成。让我知道“str_to_date”是否适用于您。@Throdne:Markus建议的解决方案(如下)似乎有效,但您的解决方案也有效:mysql>update TABLE_NAME set DateColumn=str_to_date(“2012-07-26 14:27:00”,%Y-%m-%d%H:%i:%s”),其中RecordID=“1234”;查询确定,1行受影响(0.34秒)行匹配:1更改:1警告:0注意,由于我必须在STR_to_DATE函数中指定参数的准确性(%H,而不是%H,等等),我在上找到了很多关于该项的帮助。谢谢,我将尝试一下。同时:警告没有提到任何截断,只是值“超出范围”。(被难住了)这起作用了——没有警告!mysql>更新TABLE_NAME set DateColumn=CAST(“2012-07-26 14:27:00”作为DATETIME),其中RecordID=“1234”;查询正常,1行受影响(0.07秒)行匹配:1更改:1警告:0我仍然不明白为什么它重要,为什么“精度”不同。谢谢你,马库斯