我手动(GASP!)在命令行输入了一个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";
我收到了:
Query OK, 1 row affected, 1 warning (0.11 sec)
Rows matched: 1 Changed: 1 Warnings: 1
所以,我键入了:
mysql> show warnings;
+---------+------+-----------------------------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------------------------+
| Warning | 1264 | Out of range value for column 'DateColumn' at row 1 |
+---------+------+-----------------------------------------------------+
很奇怪,我想。所以我先检查了表格以确认列(字段)类型:
mysql> describe TABLE_NAME;
+------------+----------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
| DateColumn | datetime | YES | | NULL | |
+------------+----------+------+-----+-------------------+-------+
但值DOES正确写入数据库,而不是截断,AFAIK:
mysql> select * from TABLE_NAME where RecordID="1234";
+-----------------------------------------------+
| RecordID | Date_Column | BlahBlahBlah |
+----------+---------------------+--------------+
| 1234 | 2012-07-26 14:27:00 | something.. |
+----------+---------------------+--------------+
我已经在StackOverflow.com上搜索了一个解决方案。我已经谷歌搜索了解释。我已经在http://dev.mysql.com/doc/refman/5.5/en/datetime.html读到了:
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'.
我甚至怀疑它与我进入的日期或时间有关;所以我将说明数据库所在的服务器位于太平洋夏令时(格林威治标准时间-8,除了现在的格林威治标准时间-7,用于夏令时);我从EDT的客户端登录(SSH)(这应该不重要);我将所有Date_Column值存储为GMT。在我输入价值“2012-07-26 14:27:00”的时候,所有三个日期都在7月30日之后。并不重要 - 我应能够输入 future 日期而不会出现错误 - 但认为它可能对您有所帮助。所以 -
为什么,OH为什么“2012-07-26 14:27:00”是一个超出范围的价值?
我的MySQL客户端API版本是5.1.49。
这是我第一次在StackOverflow上发布。提前感谢您的建议。
答案 0 :(得分:3)
我想知道它是否将它从字符串转换为某种日期格式。然后,该dateformat将具有过多的精度,这将被截断。在分配之前尝试将其投射到日期时间。