标签: timestamp

MySQL 2038 年易受攻击

我正在学习 Drupal 并问了这个问题:

https://drupal.stackexchange.com/questions/45443/why-timestamp-format-was-chosen-for-users-created-field/45446#45446

我决定检查一下,在 Unix 时代结束后 CMS 将如何表现。将我的本地日期设置为 01.01.2040 并重新启动。

令我惊讶的是,该网站根本不起作用。原因是,MySQL 宕机了。我尝试手动连接并出现错误:

>mysql -uroot -ppass
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
Run Code Online (Sandbox Code Playgroud)

我在 Win XP 上使用 MySQL 5.5。为什么会有这种奇怪的行为?

mysql windows timestamp

6
推荐指数
1
解决办法
1018
查看次数

MySQL 5.5.21 ON UPDATE CURRENT_TIMESTAMP 不正确

正如标题所说,我在“ON UPDATE CURRENT_TIMESTAMP”方面遇到了一些问题。这是表的 SQL 定义:

CREATE TABLE `judgements` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `parent_id` bigint(20) NOT NULL DEFAULT '0',
  `entry_id` bigint(20) NOT NULL,
  `group_id` bigint(20) NOT NULL,
  `comments` longtext,
  `rating` int(11) DEFAULT '0',
  `status` int(11) NOT NULL DEFAULT '1',
  `modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`,`entry_id`,`group_id`),
  KEY `group_id` (`group_id`),
  KEY `entry_id` (`entry_id`),
  KEY `status_id` (`status`),
  CONSTRAINT `entry_id` FOREIGN KEY (`entry_id`) REFERENCES `entries` (`id`),
  CONSTRAINT `group_id` FOREIGN KEY (`group_id`) REFERENCES `groups` (`id`),
  CONSTRAINT `status_id` …
Run Code Online (Sandbox Code Playgroud)

mysql timestamp row-modification-time

6
推荐指数
1
解决办法
7150
查看次数

为什么即使我没有指定任何内容,mysql 也会在插入/更新时添加默认时间戳?

我有一张表,如下所示:

CREATE TABLE SomeTable (  
    id int unsigned NOT NULL AUTO_INCREMENT,  
    status enum('broken','repaired') NOT NULL,  
    from datetime NOT NULL,  
    until datetime NOT NULL,  
    brought_in timestamp,  
    brought_by varchar(255) NOT NULL,  
    repair_status enum('unpayed', 'payed') DEFAULT NULL,  
    payed_when timestamp,    
    delivered_when timestamp,  
    primary key(id)    
);  
Run Code Online (Sandbox Code Playgroud)

当我创建表时,如果我做了SHOW CREATE TABLE然后我看到列brought_in被定义为具有当前时间戳ON INSERTON UPDATE.
但是我没有在我的创建表中添加这样的指令。
为什么它不像其他列那样让它为空?
现在,在每次插入或更新另一列时,它都会添加当前时间戳。我不想要那个。
它不会对其他列执行此操作。我究竟做错了什么?

mysql timestamp

6
推荐指数
1
解决办法
2万
查看次数

Postgresql 将没有时区的时间戳更新为有时区

当我创建表时,创建了一个没有时区的时间戳列。所有导入的时间都在UTC. 现在我想明确添加时区信息,并且我已经更改了该列

ALTER TABLE review ALTER COLUMN review_time TYPE TIMESTAMP WITH TIME ZONE USING review_time AT TIME ZONE 'UTC';
Run Code Online (Sandbox Code Playgroud)

选择现有数据不显示添加的时区信息

review_time
2017-07-28 02:25:44
2017-07-28 03:10:35
2017-07-28 03:11:32
2017-07-28 03:11:35
2017-07-28 03:11:38
2017-07-28 03:11:41
2017-07-28 18:54:54
Run Code Online (Sandbox Code Playgroud)

我是否需要UPDATE对现有数据运行语句?如果需要,语法是什么?

更新1

缺少时区信息的输出是由于应用程序本身 (SQLWorkbenchJ) 造成的。查询 frompsql将显示时区

mydb # SELECT review_time FROM review;
      review_time       
------------------------
 2017-08-20 08:00:02+08
 2017-07-27 00:45:33+08
 2017-07-27 00:45:37+08
 2017-07-28 02:24:03+08
 2017-07-28 02:24:27+08
 2017-07-28 02:24:31+08
 2017-07-28 02:25:31+08
Run Code Online (Sandbox Code Playgroud)

postgresql timestamp datetime

6
推荐指数
1
解决办法
4万
查看次数

在 Postgres 中将 Unix 时间戳转换为 SQL 时间戳

Date.now()我已经将和其他普通 Unix 时间戳值的结果传递1534360109480到 SQL 中,并通过以下方式运行它们:

"@converted_date" = to_timestamp("@date") AT TIME ZONE 'UTC';

而且它始终如一地返回50591-11-28 22:32:38

我不明白年份怎么可能是 50591,并且无论如何,日期/时间都不准确。

我究竟做错了什么?

postgresql timestamp datetime date

6
推荐指数
1
解决办法
9164
查看次数

为什么只有当create语句中存在两个或多个时间戳字段时,mysql才会抛出“字段的默认值无效”?

在 mysql 5.7.28 中我创建了一个像这样的表:

create table t1 (
id int not null,
d1 timestamp) 
engine=innodb;
Run Code Online (Sandbox Code Playgroud)

工作正常并创建d1为, 。non-nulldefault value current_timetampon update current_timestamp

但是当我尝试创建具有两个时间戳字段的相同表时,如下所示:

create table t1 (
id int not null,
d1 timestamp,
d2 timestamp) 
engine=innodb;
Run Code Online (Sandbox Code Playgroud)

我收到错误:

SQL 错误 (1067):“d2”的默认值无效

为什么只有在添加第二个时间戳字段时才会出现错误?
这是 mysql 中的错误还是某些预期行为?

mysql timestamp default-value mysql-5.7

6
推荐指数
1
解决办法
4080
查看次数

MySQL 中“microtime”列的默认值

我的兴趣是用 FSP 为 6 来存储时间。正如我所读到的,这不能用TIMESTAMPorDATETIME数据类型来实现。所以,我有一个double字段来存储microtime函数的输出。

无论如何我可以为这样的字段设置(甚至编写一些代码来创建)默认值吗?

我想使用类似的东西NOW(6)并获取1442059062.065123例如。

mysql timestamp default-value datetime

5
推荐指数
1
解决办法
7483
查看次数

如何比较不同时区的时间戳?

例如,我有一个带有时间戳的表:

    2018-04-05 06:00:00 +01
    2018-04-05 06:00:00 +00
    2018-04-05 06:00:00 -01
    2018-04-05 04:00:00 -01
Run Code Online (Sandbox Code Playgroud)

我想要获得的条目是......

BETWEEN 2018-04-05 06:00:00+01 AND 2018-04-05 07:00:00+01
Run Code Online (Sandbox Code Playgroud)

所以我的输出是:

    2018-04-05 06:00:00 +01
    2018-04-05 04:00:00 -01
Run Code Online (Sandbox Code Playgroud)

操作员会BETWEEN自动处理时区差异并为我提供所需的输出吗?

postgresql timestamp timezone

5
推荐指数
1
解决办法
3274
查看次数

为什么无法转换为 PostgreSQL 索引中的时间戳?

我正在处理从外部源收到的 JSON 文档。在本文档中,有一个timestamp属性对应于timestampPostgreSQL 数据类型的文本格式。换句话说,它可以被转换为timestamp类型:(data->>'timestamp')::timestamp

我想timestamp在索引中使用该属性。我尝试了以下方法:

create table t
(
    data    jsonb
);

create index on t(((data->>'timestamp')::timestamp));
Run Code Online (Sandbox Code Playgroud)

我正进入(状态:

ERROR:  functions in index expression must be marked IMMUTABLE
Run Code Online (Sandbox Code Playgroud)

为什么是这样?我知道转换为 atimestamptz并不是不可变的,因为本地化配置设置不是静态的,但我无法将该逻辑应用于转换为timestamp.

还有办法将我的timestamp财产放入索引吗?

我正在使用几天前发布的 PostgreSQL 12。

postgresql index timestamp cast postgresql-12

5
推荐指数
1
解决办法
5484
查看次数

在 postgres 中显式保留时区

我一直在研究“查看”时间的不同方式以及如何在 Postgres 中正确映射它,但我仍然不确定实际使用什么。有几篇文章建议或者更确切地说说服您将日期存储为timestamp with time zone,而不是存储为 just timestamp。我尤其在夏令时方面遇到困难。

我的用例是一个简单的面向最终用户的应用程序,只能由“欧洲/柏林”时区的人员访问。用户撰写的帖子会与创建和更新的时间戳一起存储。

假设用户在 上发布了帖子2020-01-01T10:00:00+01。如果用户现在在同一天阅读该帖子,它应该显示posted on 1st of January at 10 am。如果同一篇文章7 月在柏林被点击,它仍然应该显示posted on 1st of January at 10 am“无论夏令时如何”。

我的直觉是将时间存储为 a timestamp without time zone,否则 Postgres 会将该时间转换为 UTC 并以这种方式存储。稍后我将无法参考该帖子发布的实际时区。在这种情况下,它会显示为posted on 1st of January at 11 am(由于柏林现在提前两个小时),如果作者要检查最初的时间,这可能会让他们感到困惑发表了这篇文章。

我的想法是否正确,我是否发现了不使用的极端情况之一timestamp with time zone,或者我在这里错过了一些重要的东西?

postgresql timestamp timezone

5
推荐指数
1
解决办法
1147
查看次数