我已经手动(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 | |
+------------+----------+------+-----+-------------------+-------+
但是值确实被正确写入数据库,而不是被截断,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'.
我什至有点怀疑这与我进入的日期或时间有关。所以我会声明数据库所在的服务器是太平洋夏令时间(GMT-8,除了现在为 DST 的 GMT-7);我从 EDT 上的客户端登录(SSH)(这无关紧要);我将所有 Date_Column 值存储为 GMT。在我输入值“2012-07-26 14:27:00”时,所有三个日期都在 2012 年 7 月 30 日之后。这并不重要——我应该能够输入未来的日期而不会出错——但我认为这可能对你有所帮助。所以 -
为什么,哦,为什么“2012-07-26 14:27:00”是一个超出范围的值?
我的 MySQL 客户端 API 版本是 5.1.49。
这是我第一次在 StackOverflow 上发帖。预先感谢您的建议。