我有一个具有以下架构的 PostgreSQL 表 -
CREATE TABLE test (
id serial NOT NULL PRIMARY KEY,
username varchar(100) NOT NULL, -- The user name
dob timestamp with time zone NOT NULL -- The date of birth
);
然后我用这样的数据将一些数据插入到表中 -
INSERT INTO "test" ("username", "dob") VALUES (E'Scotty', E'2009-05-14 15:44:43');
如果我检查数据库中的数据,我会得到这个 -
mydb=> select username, dob from test where username='Scotty';
username | dob
----------+---------------------------
Scotty | 2009-05-14 15:44:43+05:30
(1 row)
在我尝试插入一些日期为 1946 年之前的数据之前,一切都很好而且很花哨 -
INSERT INTO "test" ("username", "dob") VALUES (E'James T Kirk', E'1945-01-01 11:30:11');
mydb=> select username, dob from test where username='James T Kirk';
username | dob
-------------- +---------------------------
James T Kirk | 1945-01-01 11:30:11+06:30
(1 row)
看看上面的结果。请注意时区值如何从 +05:30 更改为 +06:30
当我插入 1942 年之前的任何日期时,它实际上会变得更糟 -
INSERT INTO "test" ("username", "dob") VALUES (E'Spock', E'1941-01-01 11:30:11');
mydb=> select username, dob from test where username='Spock';
username | dob
----------+------------------------------
Spock | 1941-01-01 11:30:11+05:53:20
(1 row)
现在时区值已完全损坏,无法解析日期。
我将不胜感激。
我的时区是亚洲/加尔各答 (GMT+05:30)。
更新:我尝试通过像这样明确指定 TZ 来输入数据 -
INSERT INTO "test" ("username", "dob") VALUES (E'McCoy', E'1941-01-25 00:20:30+05:30');
即使那样也没有用。
mydb=> select username, dob from test where username='McCoy';
username | dob
----------+------------------------------
McCoy | 1941-01-25 00:43:50+05:53:20
(1 row)