5

以下は、テーブルの作成に使用されるCREATETABLEステートメントです。

CREATE TABLE IF NOT EXISTS `data_received` (
 `id` int(10) unsigned NOT NULL,
 `edit_time` datetime NOT NULL}

'edit_time'値が指定されていない場合、データがテーブルに保存される方法は次のとおりです。

id  edit_time
1   0000-00-00 00:00:00

ここで、次のステートメントを実行すると、次のようになります。

SELECT TIMESTAMPDIFF( HOUR , edit_time, NOW( ) ) AS diff_in_hours
FROM data_received;

結果が得られます:NULL

誰かが私が何が起こっているのか理解するのを手伝ってもらえますか?

4

5 に答える 5

5

これは、が関数によって受け入れられる0000-00-00 00:00:00有効な式ではないためです。DATETIME

ドキュメントを確認してください。

于 2012-10-16T12:17:58.423 に答える
2

このメソッドを使用して、mysql で編集時間を維持します

`edit_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Auto-update time'
于 2012-10-16T12:18:13.633 に答える
2

Mysql は、「役立つ」ようにするためにごみを挿入する傾向があります。mysql を STRICT モードに設定して、データベースのように動作するように設定することをお勧めします。

SET sql_mode='STRICT_ALL_TABLES'

詳しくはマニュアルをお読みください。

于 2012-10-16T12:24:19.583 に答える
1

0000-00-00 00:00:00おそらく と解釈されnullます。そして比較するnullと結果TIMESTAMPDIFFにつながりnullます。

MySQLのドキュメントによると

MySQL では、この日付自体は無効と見なされますが、ゼロ日付は「0000-00-00」として定義されます。

于 2012-10-16T12:18:15.837 に答える
0

ゼロ年にはゼロのゼロがないため、それ以降の時間を計算することはできません。

SELECT TIMESTAMPDIFF(HOUR, '0000-00-00 00:00:00', NOW())

ヌル

これは結果を返すため、どうやらMySQLは0年自体に問題はありません。

SELECT TIMESTAMPDIFF(HOUR, '0000-01-01 00:00:00', NOW())

17643758

于 2012-10-16T12:19:10.050 に答える