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