2011-12-04 14 views
2
SELECT * , unix_timestamp(NOW()) - unix_timestamp(created) AS timedif FROM is_meeting_comments WHERE meeting_id_fk=9 

このクエリは、レコードの作成時(CURRENT TIMESTAMP)と選択クエリの実行時との時差を調べるために使用されます。mysqlの負の時差

このクエリは、リモートPCの戻り値です。私のローカルサーバで初めてテストしたときに、この問題は明らかになりませんでした。異なるタイムゾーンが設定されているためですか?しかし、どのようにこの問題は、時間はすべてのPCに関係なく同じでなければならないので、サーバーの終わりから計算されます。

enter image description here

なぜ負の値が発生していますか?

+0

@Chrisが正しい方向に向いています。それ以外に、datetimeの代わりに、作成した列のタイムスタンプデータ型の使用を検討することもできます。 – Eddy

+0

@eddy私は既にtimestampデータ型を使用しています。 – SupaOden

答えて

2

タイムゾーンの違いにより、マイナスになる可能性があります。 unix_timestamp関数は、引数がローカルタイムゾーンにあるとみなし、変換プロセスの一部としてUTCに変換します。 「作成済み」がローカルタイム(非UTF)として別のタイムゾーン(または別のタイムゾーンが設定されている)にあるPCに保存されていると、別のタイムゾーンのシステムで読み込んだときに変換がオフになる可能性があります。

接続ごとのタイムゾーンを許可するようにMYSQLを構成することができます(タイムゾーンはデータベースサーバーのタイムゾーンではなくユーザーのタイムゾーンです)。これにより、日付の格納方法に影響する可能性があります。詳細については、thisのページをご覧ください。