web-dev-qa-db-ja.com

MySQL 1292誤った日時値

タイムスタンプ列に「2011/03/13 02:53:50.000000000」を挿入しようとすると、このエラーが発生します。 13を15、14、12、または11に変更しても問題ありません。また、/を-に変更してみましたが、まだ使用できません。

このエラーに関連する他のスレッドのいくつかを調べましたが、どれも当てはまらないようです。

バージョン5.7.9を実行しています。

8
CycleGeek

これを理解するにはしばらく時間がかかりました...

問題は、「2011-03-13 02:53:50」が夏時間の午前2時から3時への切り替えのために違法であるため、DST導入日の午前2時から3時までのすべての時間値が無効になることです。 「2016-03-13 02:32:21」なども同様.

システムのタイムゾーンをDSTを使用しないタイムゾーンに変更します。これで問題ありません。

24
nik

挿入する前に MySQLのstr変換 を使用する必要があると思います。または、MySQLにクエリを実行する前に、適切な形式でデータを準備します。

マイクロ秒形式も間違っています。 MySQLのドキュメントにはこれが明記されています

DATETIMEまたはTIMESTAMP値には、末尾の小数秒部分をマイクロ秒まで含めることができます(6桁)精度。


更新:ローカルホストで同じバージョンのMySQLを使用していますが、動作します。変換を実行しようとしました

select str_to_date("2011-03-13 02:53:50.000000", "%Y-%m-%d %H:%i:%s.%f") as `t`

そして得た:

+----------------------------+
| t                          |
+----------------------------+
| 2011-03-13 02:53:50.000000 |
+----------------------------+
1 row in set (0.00 sec)

SQLFiddle は、他のバージョンのMySQLでのことを確認するものです。

私はアイデアを使い果たしました。この問題は、テーブル構造またはMySQL + OSの特定のバージョンの「ローカルグリッチ」に関連していると思います。

1
Farside

これを試す必要があります:

STR_TO_DATE( '2011/03/13 02:53:50', '%Y/%m/%d %H:%i:%s')

または、ダッシュセパレーター(-)を使用して日付を挿入する必要があります

'2011-03-13 02:53:50' 

SQL FIDDLE DEMO

1
Rahul Tripathi

それでも、CentOSとMySQLのバージョンの組み合わせなど、問題の有無はわかりません。列をtimestamp(6)ではなくdatatime(6)に変更し、すべてのデータを正常にインポートできました。

0
CycleGeek