0

timestampdb テーブルに列があります。値を保存する:

UPDATE `table` SET `activated_at` = CURRENT_TIMESTAMP WHERE `id` = 123;

正常に動作します。

しかし、php 関数を使用しtime()てタイムスタンプを取得すると、機能しません。date('Y-m-d H:i:s')列の値を使用してのみ機能します。質問はなぜですか?

列の定義は次のとおりです。

`activated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'

私は php mysql 拡張機能を使用しています (はい、非推奨であることは知っていますが、いくつかのレガシー コードを維持する必要があります)。

4

4 に答える 4

3

PHP のtime()は UNIX タイムスタンプを返すため、タイムスタンプは日時型であり、有効な日時値が必要です。有効な日時値を指定しなかった場合は、 のように格納されます0000-00-00 00:00:00。フィールドを日時型として保持する場合はdate('Y-m-d H:i:s')、php で指定する必要があります

また、mysqlのさまざまな日時タイプのドキュメントを確認してください。

于 2013-10-29T14:07:13.573 に答える
2

time()は UNIX タイムスタンプを返しますが、MySQL タイムスタンプ列は などの特定の形式をサポートしていますYYYY-MM-DD HH:II:SSdatefor PHP またはFROM_UNIXTIMEmysqlを使用して簡単に変換できます。

于 2013-10-29T14:08:19.663 に答える
0

time() を使用する場合は、列の型を varchar(15) に変更します

于 2013-10-29T14:08:55.967 に答える
0

ここを見て

TIMESTAMP データ型は、日付部分と時刻部分の両方を含む値に使用されます。TIMESTAMP の範囲は、「1970-01-01 00:00:01」UTC から「2038-01-19 03:14:07」UTC です。

MySQL は、保存のために TIMESTAMP 値を現在のタイム ゾーンから UTC に変換し、取得のために UTC から現在のタイム ゾーンに戻します。(これは、DATETIME などの他のタイプでは発生しません。) デフォルトでは、各接続の現在のタイム ゾーンはサーバーの時間です。タイムゾーンは、接続ごとに設定できます。タイム ゾーンの設定が一定である限り、保存した値と同じ値が返されます。TIMESTAMP 値を格納し、タイム ゾーンを変更して値を取得すると、取得した値は格納した値とは異なります。これは、両方向の変換に同じタイム ゾーンが使用されていないために発生します。現在のタイム ゾーンは、time_zone システム変数の値として使用できます。詳細については、セクション10.6「MySQL サーバーのタイム ゾーン サポート」を参照してください。</p>

*nix タイムスタンプと MySQL TIMESTAMP は同じではありません...そのため、*nix タイムスタンプから MySQL タイムスタンプに変換する必要があります。date('Y-m-d H:i:s', $unix_timestamp)

于 2013-10-29T14:09:01.877 に答える