2021-03-15 · MySQL开源数据库领先者
timestamp:占用 4 字节,内部实现是新纪元时间(1970-01-01 00:00:00)以来的秒,那么这种格式在展示给用户的时候就需要做必要的时区转换才能得到正确数据。
在进行新纪元时间(1970-01-01 00:00:00)以来的秒到实际时间之间转换的时候 MySQL 根据参数 time_zone 的设置有两种选择:
time_zone 设置为 SYSTEM 的话:使用 sys_time_zone 获取的 OS 会话时区,同时使用 OS API 进行转换。对应转换函数 Time_zone_system::gmt_sec_to_TIME
time_zone 设置为实际的时区的话:比如 ‘+08:00’,那么使用使用 MySQL 自己的方法进行转换。对应转换函数 Time_zone_offset::gmt_sec_to_TIME
实际上 Time_zone_system 和 Time_zone_offset 均继承于 Time_zone 类,并且实现了 Time_zone 类的虚函数进行了重写,因此上层调用都是 Time_zone::gmt_sec_to_TIME。
注意这种转换操作是每行符合条件的数据都需要转换的。
在实现类中查询数据库后,往对象中设置值的时候用getTimestamp如名setPubtime,rs.getTimestamp1。
1、每个数据库都有一个计数器,当对数据库中包含timestamp列的表执行插入或更新操作时,该计数器值就会增加,该计数器是数据库时间戳,这可以跟踪数据库内的相对时间,而不是时钟相关联的实际时间。
2、一个表只能有一个timestamp列,每次修改或插入包含timestamp列的行时,就会在timestamp列中插入增量数据库时间戳值,使用某一行中的timestamp列可以很容易地确定该行中的任何值自上次读取以后是否发生了更改。
3、如果对行进行了更改,就会更新该时间戳值,如果没有对行进行更改,则该时间戳值将与以前读取该行时的时间戳值一致,你如果是要返回数据库的当前时间戳值,可以使用DBTS返回当前数据库最后使用的时间戳值,插入或更新包含 timestamp列的行时,将产生一个新的时间戳值。
timestamp类型的好像不行啊,我是这样的 select a from tableA where time>='2004-01-30'
字段名称不要用time,这是关键字。如果一定要用这个作为列名,两边加上方括号