2016-06-27 10 views
0

私は次のコードを使用して1分より古いデータを選択したいと考えています。MySQLは古い*時間を削除します

SELECT * FROM `auth_temp` WHERE date > (NOW() - INTERVAL 1 MINUTE) 

しかし、動作しませんでした。それから私はいくつかの他のトピックをチェックし、1人の人がサーバ時間について話しました。私はホストに尋ねました。サーバ時間は15:30です。 私の場所とMySQLのログは21:30、別名6時間です後で。 誰かが私のコードをどうやって調整すべきですか?

ありがとうございました!

+0

dateという名前の列がありますか? – scaisEdge

+0

"xより古い"は、日付値が*指定された日付よりも小さく、より大きくない行を必要とすることを示唆しています。 – spencer7593

+0

@scaisEdge phpでは、次のように挿入されます。date( 'Y/m/d H:i:s');そしてこれは行がどのように見えるかです:https://gyazo.com/a5377aaf03d12342cd67d6f376847fc9 – Jeroen

答えて

1

タイムゾーンの問題が発生しています。ほとんどのサーバーはUTCで動作します。フィールドタイプとしてTIMESTAMPがある場合、MySQLはサーバ時間からUTCに戻って戻ってきます。 SET time_zone = timezone;Docs)を使用して、MySQLがサーバ時間とみなすものを調整できます。実際にタイムゾーンを気にする場合は、UTCを使用してアプリケーションで変換することをお勧めします。

+0

phpでそれは次のように挿入されます:date( 'Y/m/d H:i:s');そして、これは行がどのように見えるかです:https://gyazo.com/a5377aaf03d12342cd67d6f376847fc9 – Jeroen

0

現在のSQL文では、1分より新しいデータのみが選択されます。これは、1分より古いデータを選択します

SELECT * FROM auth_temp WHERE date < (NOW() - INTERVAL 1 MINUTE)

:に変更します。行を挿入するときに日付列を設定するのにNOW()を使用している場合は、アプリケーションとデータベース層のタイムゾーンが異なっていても小さな修正が必要です。アプリケーション層から日付列を設定している場合、タイムゾーンがデータベースレイヤーとは異なる設定になっていると、同期の問題が発生します。

MySQLサーバーが異なるタイムゾーンで実行されているか、一般的な世界時(UTC)で動作しているようです。 UTC時間でMySQLを実行すると、複数のタイムゾーンにあるユーザを処理するのに適しています。あなたのコードでは、UTC時間に簡単に設定されていれば、データベースとアプリケーション層で使用しているタイムゾーンを同期させることができます。それが異なるタイムゾーンに設定されている場合は、同様に可能なはずですが推奨されません。

+0

phpで挿入されます:日付( 'Y/m/d H:i:s');これは行がどのように見えるかです:https://gyazo.com/a5377aaf03d12342cd67d6f376847fc9あなたの行はうまくいかないようですが、私はちょうど新しい行を挿入しました。そしてそれより古い5分ですが、それは表示されません – Jeroen

+0

PHP MySQLは、YYYY-MM-DD HH:MM:SSのようにフォーマットする必要があります。 PHPコードは次のようになります:date( 'Y-m-d H:i:s');これがMySQLサーバー上で生成されたNow()時間と同期することを確認してください。さもなければ、WHERE条件でPHP時間を使用する必要があります。 –

関連する問題