Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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 MYISAM引擎不接受默认时间戳值_Php_Mysql_Time_Myisam - Fatal编程技术网

Php MySQL MYISAM引擎不接受默认时间戳值

Php MySQL MYISAM引擎不接受默认时间戳值,php,mysql,time,myisam,Php,Mysql,Time,Myisam,我的cPanel服务器上运行着MyISAM引擎,服务器不支持InnoDB引擎,我只有MyISAM引擎。 当我尝试创建一个timestamp类型的表列,默认值为(当前时间+5分钟)时,它会给出一个错误。 这在使用InnoDB的我的机器上起作用,但在使用MyISAM的服务器上,它给出了一个错误您的SQL语法中有一个错误;检查手册,确保。。。接近默认值(现在()+300) 创建表测试( 令牌\死亡\时间时间戳默认值(现在()+300) ); 我也试过了 创建表测试( 令牌\死亡\时间戳默认日期\添加

我的cPanel服务器上运行着MyISAM引擎,服务器不支持InnoDB引擎,我只有MyISAM引擎。

当我尝试创建一个timestamp类型的表列,默认值为(当前时间+5分钟)时,它会给出一个错误。 这在使用InnoDB的我的机器上起作用,但在使用MyISAM的服务器上,它给出了一个错误
您的SQL语法中有一个错误;检查手册,确保。。。接近默认值(现在()+300)

创建表测试(
令牌\死亡\时间时间戳默认值(现在()+300)
);
我也试过了

创建表测试(
令牌\死亡\时间戳默认日期\添加(现在(),间隔5分钟)
);

我能用MyISAM实现我想要的吗?或者我必须在我的PHP脚本中进行“添加”吗?你可以使用当前的时间戳

CREATE TABLE test(
   token_death_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
要将所需的时间戳设置为默认值,您可以在变量中设置它,并可以使用prepare&execute语句,使用以下代码:

SET @def_timestamp = DATE_ADD(NOW(), INTERVAL 1 DAY);
SET @query = CONCAT("CREATE TABLE test(token_death_time TIMESTAMP DEFAULT '", @def_timestamp , "')");
PREPARE stmt from @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

您需要的默认值表达式适用于MySQL版本8.0.13或更高版本(这两个查询都在8.0.19版本上成功执行)


而且问题与表的引擎无关。

您不能将函数用作默认值(版本8之前)

但你可以使用触发器

CREATE TRIGGER before_insert_test
BEFORE INSERT ON test 
FOR EACH ROW
SET new.token_death_time = DATE_ADD(NOW(), INTERVAL 5 MINUTE);

与OP的任务不匹配。您的问题是“MySQL MYISAM引擎不接受默认时间戳值”。所以我的答案是,它允许当前_时间戳默认为setSubject!=问题。主题中甚至没有问号……您是在按主题指定您的问题。这意味着你指定了错误的主题。MyIsam允许将当前_时间戳设置为默认值,即it@ZOLDIK是的,没问题。如果InnoDB被锁定,那么我恐怕触发器创建也被锁定了……是的,它在机器上工作,但在服务器上我没有创建触发器的权限,我无法更改它们。我还尝试创建函数并在默认情况下调用它,但无法创建函数。考虑到“在服务器上我没有创建触发器的权限”,我建议您在检查令牌过期的查询中考虑这5分钟。请检查我的更新答案,您可以使用variable和prepare语句找到解决方案。@Akina谢谢,但我在同步php时间和mysql时间时遇到问题。我在同步php时间和mysql时间时遇到问题。在服务器端执行所有计算-这个问题将不会发生。