php mysql时间戳

use*_*391 6 php mysql timestamp

我需要跟踪在mysql数据库中创建用户的日期和时间.我有一个名为'created'的列,数据类型为TIMESTAMP.

问题是当用户更改其密码或其他信息时,TIMESTAMP值会发生变化.如何将此设置为不更改????

dcp*_*dcp 7

听起来你没有正确设置timestamp列:

查看指南:

*

  Auto-initialization and auto-update:

  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

*

  Auto-initialization only:

  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP

*

  Auto-update only:

  ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP

*

  Neither:

  ts TIMESTAMP DEFAULT 0
Run Code Online (Sandbox Code Playgroud)


Dan*_*llo 5

您可能只想将其默认子句设置为CURRENT_TIMESTAMP(在其他答案中注明@ Mark和@ dcp):

CREATE TABLE your_table (
   ...
   `created_timestamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Run Code Online (Sandbox Code Playgroud)

测试用例:

CREATE TABLE tb (`a` int, `c` TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.04 sec)

INSERT INTO tb (a) VALUES (1);
Query OK, 1 row affected (0.01 sec)

SELECT * FROM tb;
+------+---------------------+
| a    | c                   |
+------+---------------------+
|    1 | 2010-06-09 23:31:16 |
+------+---------------------+
1 row in set (0.00 sec)

UPDATE tb SET a = 5;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

SELECT * FROM tb;
+------+---------------------+
| a    | c                   |
+------+---------------------+
|    5 | 2010-06-09 23:31:16 |
+------+---------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

编辑:

在我的原始答案中,我建议使用DATETIME一个DEFAULT子句设置为的列CURRENT_TIMESTAMP.但是,只有在使用TIMESTAMP数据类型时才能实现这一点,如文档中所述:

DEFAULT数据类型规范中的value子句指示列的默认值.除了一个例外,默认值必须是常量; 它不能是一个功能或表达.这意味着,例如,您不能将日期列的默认值设置为函数的值,例如NOW()CURRENT_DATE.例外情况是您可以指定列CURRENT_TIMESTAMP的默认值TIMESTAMP.