10

コマンドラインで手動で(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-2614:27:00」を入力していたとき、3つの日付はすべてそれ以降の7/30/12でした。それは重要ではありません-エラーが発生することなく将来の日付を入力できるはずです-しかし、知っておくと役立つかもしれないと思いました。それで -

なぜ、OHなぜ「2012-07-2614:27:00」が範囲外の値なのですか?

私のMySQLクライアントAPIのバージョンは5.1.49です。

StackOverflowに投稿するのはこれが初めてです。よろしくお願いします。

4

1 に答える 1

3

文字列から日付形式に変換しているのではないでしょうか。その場合、その日付形式の精度が高すぎて切り捨てられます。割り当てる前に、日時にキャストしてみてください。

于 2012-07-31T00:01:29.293 に答える