web-dev-qa-db-ja.com

不正な日時値Mysql

おはようございます。 Mysql 5.7.25:

insert into mytable values('2019-03-31 02:06:29') 

エラー「#1292不正な日時値」を返す

だが:

insert into mytable values('2019-03-31 03:06:29') 

エラーを返しません。 (フィールドのタイプはタイムスタンプです)

どこが間違っているのですか?

ありがとう

チコ

2
chico

これによりエラーが発生する場合:

insert into mytable values('2019-03-31 02:06:29') 

しかし、これはしません:

insert into mytable values('2019-03-31 03:06:29')

あなたはEUのようなタイムゾーン、特にCETを使用している可能性があります(データベースでtzを使用せず、UTCを使用することを強くお勧めします。簡単です)。 EU(およびその他の国)は、夏時間調整のために日曜日の午前2時から午前3時までに時計を変更したため、そのようなTZを使用している場合は不可能です。 、 '2019-03-31 02:XX:XX'データを挿入します。そのようなデータはそのタイムゾーンでは無効です。

行う:

SELECT @@time_zone;

使用しているタイムゾーンを知るため。 SYSTEMと表示されている場合は、OSで確認してください。

修正:それを挿入しないでください。その時刻は存在しませんでした。2の前または3の後に発生しました。または、データベースのタイムゾーンを修正するか、挿入しようとしているものと一致するos。

適切な修正:データベースのタイムゾーンを処理しないでください( 決して、自分で実装しようとしないでください )、それを実行してくださいプレゼンテーション時にのみ、アプリケーションバックエンドにUTCを使用します。サーバーもUTCを使用するように設定します。

5
jynus

タイムゾーンの異なるDBからMysql Dumpをインポートすると、同様の問題が発生しました。その列は、デフォルト値としてCURRENT_TIMESTAMPを使用するTIMESTAMPでした。

SELECT @@time_zone両方のサーバーがタイムゾーンとしてSYSTEMを使用していることがわかりました。しかし、ターミナルでdateと入力すると、1つのサーバーがUTCを使用し、もう1つのサーバーがAESTを使用していることがわかりました。


インポートする前にタイムゾーンを設定します。 MySQLでのそのセッションのタイムゾーンの変更:

インポートセッションと同じタイムゾーンを設定できることに気づきました。

SET time_zone='+00:00'して、インポートを実行します。

MySQLでのグローバルタイムゾーンの設定

または、mysqlのグローバルタイムゾーンを設定して、将来(mysqlを再起動するまで)気にする必要はありません。

SET @@global.time_zone='+00:00'

My.cnfでの設定

Initステートメントを設定するか、ドキュメントに記載されているように、またはMAMPを使用している場合は別の方法で、さまざまな方法でそれを行うことができます。これを行うための適切な方法については、 this answer を確認してください。

0
Ricardo Martins