Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySql时间戳列是自动更新的。为什么?_Php_Mysql - Fatal编程技术网

Php MySql时间戳列是自动更新的。为什么?

Php MySql时间戳列是自动更新的。为什么?,php,mysql,Php,Mysql,我使用以下SQL创建了一个表: CREATE TABLE `test_table` ( `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, `data` TEXT, `timestamp` TIMESTAMP ) CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE InnoDB; 但是当我运行SHOW CREATE TABLE test\u TABLE时,我得到: CREATE TABLE

我使用以下SQL创建了一个表:

CREATE TABLE `test_table` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `data` TEXT,
  `timestamp` TIMESTAMP
) CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE InnoDB;
但是当我运行
SHOW CREATE TABLE test\u TABLE
时,我得到:

CREATE TABLE `test_table` (
 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
 `data` text COLLATE utf8_unicode_ci,
 `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

为什么默认情况下在更新当前时间戳时分配时间戳列?我不知道如何摆脱这个。任何帮助都将不胜感激。

请改用日期时间字段

MySQL中的时间戳通常用于跟踪记录的更改,以及 记录每次更改时都会更新。如果你想 存储一个特定值,您应该使用datetime字段

如果您的意思是要决定是使用UNIX时间戳还是 本机MySQL日期时间字段,使用本机格式。你能行 在MySQL中以这种方式进行计算(“选择日期添加(my_datetime, 间隔1天),并且很容易更改值的格式 到UNIX时间戳(“选择UNIX_时间戳(my_datetime)” 如果要使用PHP对记录进行操作,请查询该记录


如果您希望在更新时不会自动将其添加到
时间戳中
您必须这样定义它

CREATE TABLE `test_table` (
   ...
   `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ...

转到php my admin,将“default”选项更改为定义的,并使用phpmyadmin在“test_table”的“timestamp”列的属性部分选择第一个选项,每次更改都很麻烦,我有25-30个这样创建的表。未来可能会创造更多。有什么SQL方法可以阻止这种情况吗?我可以安全地将我的table.columns从时间戳更改为datetime吗?请注意,我的表格有数据。是的,你可以。但一般来说,我强烈建议在测试数据库中使用生产数据测试任何表更改。是否可以省略默认的当前\u时间戳部分?无需担心。刚刚检查过,不,我不能!但是,我使用了默认值0来防止出现这种情况。如果希望列可以为NULL且没有自动行为,则可以改用
DEFAULT NULL
,或者使用
datetime
列类型,例如:timestamp datetime DEFAULT NULL as@thaspius suggestedDeclare列为
timestamp NULL DEFAULT NULL