Mysql 自动填充此列的内容是什么?

Mysql 自动填充此列的内容是什么?,mysql,timestamp,Mysql,Timestamp,我正在Win7 64位上使用MySQL 5.6.1 我有一个标准的审计列添加到所有表中,称为CRT_TS(创建时间戳),还有一个UPD_TS(更新时间戳)列。我计划使用utc_timestamp()通过插入前触发器和更新前触发器填充这些 UPD_TS列的行为与我预期的一样。但是,CRT_TS列似乎会自动填充,而无需为该列定义默认值或触发器 我可以通过运行以下脚本来重现这种行为 create schema `test` default character set utf8 collate utf8

我正在Win7 64位上使用MySQL 5.6.1

我有一个标准的审计列添加到所有表中,称为CRT_TS(创建时间戳),还有一个UPD_TS(更新时间戳)列。我计划使用utc_timestamp()通过插入前触发器和更新前触发器填充这些

UPD_TS列的行为与我预期的一样。但是,CRT_TS列似乎会自动填充,而无需为该列定义默认值或触发器

我可以通过运行以下脚本来重现这种行为

create schema `test` default character set utf8 collate utf8_general_ci;

drop table test.TEST_TABLE;

create table test.TEST_TABLE(
    TEST_ID             int             not null    auto_increment ,

    CRT_TS              timestamp       not null ,
    UPD_TS              timestamp       not null ,

    TEST_ALIAS          varchar(64)     not null ,
primary key   PK_PERM (TEST_ID) ,
unique  index UI_PERM_01 (TEST_ALIAS) )
auto_increment = 1001;

insert into test.TEST_TABLE
(TEST_ID
,TEST_ALIAS)
values
(1
,'testing');

select *
from   test.TEST_TABLE;
在上面的例子中,CRT\u TS列没有被提供值,但是它被填充的值与now()函数提供的值相同。UPD_TS列用全零填充,但两列的定义相同

我的问题是,什么填充了CRT\u TS列?我正在尝试将UPD_TS和CRT_TS列都设置为utc_timestamp()值。即使在CRT的触发器中设置值,该值也会被覆盖


感谢您提供的清晰信息。

如果您查看数据库中的表定义,我怀疑它的“默认值”为“当前时间戳”。手动:它在sqlfiddle()中按预期工作——即返回一个错误。错误应该出现在
插入
(因为
CRT\u TS
UPD\u TS
)中没有给定值,但是MySQL会等待
选择
来报告错误。Ryan,感谢您的回答。有趣的是,UPT_TS列被默认为全零,而CRT_TS列在我的脚本中定义的完全相同,但被默认为当前时间戳。根据您指向我的文档以及我在此基础上找到的一些其他帖子,我将把数据库的日历设置为UTC,并在我的表定义中将两列默认为CURRENT_TIMESTAMP。