2012-07-30 47 views
10

我手動(GASP!)在命令行輸入MySQL命令,並且我收到了一個警告,我甚至不能理解。 (並且在任何人說什麼之前,是的,我知道:1.使用命令行界面不是最好的方法; 2.我的表不被命名爲「TABLE_NAME」,我的列不被命名爲「DateColumn」,並且我的RecordID值不是真的是「1234」; 3.也許我列的類型應該是TIMESTAMP,但現在,它不動的....)對於有效的DateTime值奇怪的MySQL警告1264

試圖在2到輸入的日期「2012年7月26日的值。 :27 PM(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    |  | 
+------------+----------+------+-----+-------------------+-------+ 

但值不會得到正確寫入到數據庫中,而不是被截斷,據我所知:

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

+-----------------------------------------------+ 
| RecordID | Date_Column   | BlahBlahBlah | 
+----------+---------------------+--------------+ 
|  1234 | 2012-07-26 14:27:00 | something.. | 
+----------+---------------------+--------------+ 

我已經搜索StackOverflow.com獲取解決方案。我已經使用Google進行了解釋。我已經在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,現在格林尼治標準時間GMT-7除外);我從EDT上的客戶端登錄(SSH)(這應該不重要);我將所有的Date_Column值存儲爲GMT。在我輸入價值「2012-07-26 14:27:00」時,所有三個日期在2012年7月30日之後都很好。不是說它應該重要 - 我應該能夠進入未來日期沒有得到一個錯誤 - 但認爲它可能有助於你知道。所以 -

爲什麼,OH WHY是「2012-07-26 14:27:00」超出範圍的值?

我的MySQL客戶端API版本是5.1.49。

這是我第一次發佈在StackOverflow上。預先感謝您的建議。

+0

「支持的範圍是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。」所以我沒有看到你的價值有問題... – Jocelyn 2012-07-31 00:14:03

+0

你運行的MySQL版本是什麼? – Throdne 2012-07-31 02:56:56

+0

@Throdne mysql> select version(); 版本() 5.1.56-log – user1564318 2012-08-01 01:22:29

回答

3

我不知道它是否將它從字符串轉換爲某種日期格式。那dateformat會有太多的精度,會被截斷。嘗試在分配之前將其轉換爲日期時間。

+0

謝謝,我會盡力的。同時:警告沒有提及截斷的任何內容,只是該值是「超出範圍」。 (難倒。) – user1564318 2012-08-01 01:16:09

+0

這工作 - 沒有警告! mysql> update TABLE_NAME set DateColumn = CAST(「2012-07-26 14:27:00」AS DATETIME)where RecordID =「1234」; 查詢OK,1行受影響(0.07秒) 行匹配:1改變:1警告:0 我仍然不明白爲什麼它重要,爲什麼「精度」不同。 但謝謝@Markus – user1564318 2012-08-15 00:18:11