项目使用的postgres数据库,给表添加字段,类型日期,默认为当前时间,然后发现会差个8小时,请问如何在数据库上解决该问题?让数据存储咱当前时区?
国外的服务器
关联问题:
数据库本身就应该存时间戳或者utc时间。前端根据用户locale再parse成本地时间
是不是因为机器就是慢8小时,要设置机器
是的,美区的机器
服务器时区不对吧
当前时间是值得机器时间,存UTC,服务端转
8个小时,难道是UTC时间?
应该是的
所以机器改东八区,就行了吧
那存UTC时间不挺好的,标准时间,服务端提出来时处理一下呗?
不是,你存数据的时候储存带时区的时间,读的时候会自动转,或者直接给前端,前端也会自动转
这样反而更好吗,因为存储照片信息,每个都要转下感觉怪麻烦,可读性也差点
如果是数据库时间比实际时间慢,直接改时间就行。
如果是数据库时间比实际时间快,一定先备份数据库!!!
然后查找相关手册,看修改数据库时间的方法!!!
因为把数据库时间往未来调,那相当于中间有一段时间就跳过去了,没问题。
因为把数据库时间往过去调,那相当于中间有一段时间就重复了,这违反了数据库最基本原则,很多数据库会直接宕机,而且很难很难恢复!!!
这个得看项目来,我这边的策略是跟时间有关的,我曾经试过一个企业级安全软件的策略,我在管理后台设置了8:00~12:00禁用U盘,本来一切正正常常的,结果有一天我发现了在这段时间有一台设备也能用U盘,后来我到设备一看,时区被改了,本来时间现在12点,设备上的时间是7点,然后,这就绕过了…
也是真行,一个安全软件做的策略能在客户端被一个标准用户都能设置的时区绕过,所以后面我的项目都是数据库只存UTC时间,服务端调出和客户端对比时都按UTC来,只有显示在用户面前时才根据用户所在的时区计算显示当地时间。
我Oracle也是美区时间,慢了8小时,不知道怎么改成中国时间?
utc+8
需要配置系统时区为shanghai
你用timestampz,在存到数据库的时候用UTC。如果你有多时区存储的需求
数据库我记得可以设置时区,你试下
修改 postgresql.conf
# 示例:设置为上海/北京时间
timezone = 'Asia/Shanghai'
# 或者设置为东京时间
# timezone = 'Asia/Tokyo'
修改后需要重启 PostgreSQL 服务才能生效。