タイムスタンプ列に「2011/03/13 02:53:50.000000000」を挿入しようとすると、このエラーが発生します。 13を15、14、12、または11に変更しても問題ありません。また、/を-に変更してみましたが、まだ使用できません。
このエラーに関連する他のスレッドのいくつかを調べましたが、どれも当てはまらないようです。
バージョン5.7.9を実行しています。
これを理解するにはしばらく時間がかかりました...
問題は、「2011-03-13 02:53:50」が夏時間の午前2時から3時への切り替えのために違法であるため、DST導入日の午前2時から3時までのすべての時間値が無効になることです。 「2016-03-13 02:32:21」なども同様.
システムのタイムゾーンをDSTを使用しないタイムゾーンに変更します。これで問題ありません。
挿入する前に 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の特定のバージョンの「ローカルグリッチ」に関連していると思います。
これを試す必要があります:
STR_TO_DATE( '2011/03/13 02:53:50', '%Y/%m/%d %H:%i:%s')
または、ダッシュセパレーター(-)を使用して日付を挿入する必要があります
'2011-03-13 02:53:50'
それでも、CentOSとMySQLのバージョンの組み合わせなど、問題の有無はわかりません。列をtimestamp(6)ではなくdatatime(6)に変更し、すべてのデータを正常にインポートできました。