2

次のテーブル定義があるとします。

CREATE TABLE `timestamp_test` (
  `timestamp_test_id` bigint(18) NOT NULL AUTO_INCREMENT,
  `timestamp_test_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`timestamp_test_id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

そして、次のデータ:

INSERT INTO `timestamp_test` VALUE (0,'2009-03-09 02:07:01');
INSERT INTO `timestamp_test` VALUE (0,'2009-03-08 02:07:01');

最初の日付を挿入できるのに、2 番目の日付を挿入できない理由を教えてください。

MySQL バージョン: 5.5

編集:私が受け取っているエラーは次のとおりです:

[SQL] 
INSERT INTO `timestamp_test` VALUE (0,'2009-03-08 02:07:01');
[Err] 1292 - Incorrect datetime value: '2009-03-08 02:07:01' for column 'timestamp_test_date' at row 1
4

4 に答える 4

3

あなたのクエリは正しくありません。次のようになりますVALUES:

INSERT INTO `timestamp_test` VALUE (0,'2009-03-08 02:07:01');
                                  ^--- missing S

2 番目の値を挿入できない理由については、同じ id 値を持つ 2 つのレコードを挿入することにより、主キー違反が発生しています: 0

于 2013-09-27T20:34:21.963 に答える
2

TIMESTAMPデータ型はタイムゾーンに対応しています。入力時刻は、整数として格納される前にセッションのタイム ゾーンから UTC に変換され、 でセッションのタイム ゾーンに変換されますSELECT

多くのタイムゾーンでは、その朝にクロックが 01:59:59 から 03:00:00 に変更されたため、2009-03-08 02:07:01 はありませんでした。現在のセッションが何であれ、このエラーが発生しています。タイムゾーンは... それらのタイムゾーンの1つでした。

この値を DST 準拠のタイム ゾーンで同じタイム ゾーンとの間で変換しようとすると、時間がどのように進められるかに注意してください。

mysql> SELECT CONVERT_TZ('2009-03-08 02:07:01','EST5EDT','EST5EDT');
+-------------------------------------------------------+
| CONVERT_TZ('2009-03-08 02:07:01','EST5EDT','EST5EDT') |
+-------------------------------------------------------+
| 2009-03-08 03:00:00                                   |
+-------------------------------------------------------+
1 row in set (0.00 sec)
于 2013-09-27T21:29:08.350 に答える
1

最初の列が自動インクリメントの場合、挿入時に明示的に設定する必要はありません。

INSERT INTO timestamp_test(timestamp_test_date) VALUES ('2009-03-09 02:07:01');
INSERT INTO timestamp_test(timestamp_test_date) VALUES ('2009-03-08 03:00:00');

VALUEMySQL ドキュメントに記載されているように、singular は有効です: http://dev.mysql.com/doc/refman/5.5/en/insert.html

また、前述のように、その日付の2009-03-08 02:07:01午前 2 時に夏時間が有効になるため、日付はいくつかのタイムゾーンでは発生しませんでした2009-03-08 03:00:00

于 2013-09-27T20:37:20.660 に答える
0

同じ主キーを持つ 2 つのレコードを挿入しようとしていてVALUE、代わりに を使用しているようですVALUESINSERTステートメントを更新します。

INSERT INTO `timestamp_test` VALUES (0, '2009-03-09 02:07:01');
INSERT INTO `timestamp_test` VALUES (1, '2009-03-08 02:07:01');
于 2013-09-27T20:35:22.787 に答える