• PostgreSQL中with和without time zone两者有什么区别


    with和without time zone两者有什么区别

    1.区别

    1)名字上看一个是带时区的,另一个是不带时区的,查出来的时间是一样的,只是一个带时区标志,一个不带而已,时区的基准是格林威治时间UTC。
    2)这对于数据的显示上来说,区别就是时间数据的末尾带不带时区标志,即+/-时区,比如中国(prc),时区是东八区,带时区标志的话就是+08。

    数据库内部还是都存储的是UTC格式时间,根据当前的时区进行转换显示。

    2.查看配置文件中时区的配置:

    [postgres@localhost ~]$ more /database/pgdata/postgresql.conf |grep timezone
    log_timezone = 'US/Pacific'
    timezone = 'US/Pacific'
    #timezone_abbreviations = 'Default' # Select the set of available time zone
    # share/timezonesets/.

    3.客户端时区的更改说明

    在服务端有一些时区的配置信息,安装的时候就给装上了,客户端时区的更改并不能随意设置。
    这些配置信息是放在$PGHOME/share/timezone里面。


    4.实验:

    美国西7区与中国东八区相差15个小时,格林威治时间UTC和东八区相差8个小时

    test=# set timezone="US/Pacific";
    SET
    test=# show timezone; 
    TimeZone 
    ------------
    US/Pacific
    (1 row)
    
    test=# select now()::timestamp with time zone, now()::timestamp without time zone;
    now | now 
    -------------------------------+----------------------------
    2019-08-20 11:41:47.578319-07 | 2019-08-20 11:41:47.578319
    (1 row)
    
    test=# set timezone=prc; 
    SET
    test=# show timezone; 
    TimeZone 
    ----------
    PRC
    (1 row)
    
    test=# select now()::timestamp with time zone, now()::timestamp without time zone;
    now | now 
    -------------------------------+----------------------------
    2019-08-21 02:42:01.898303+08 | 2019-08-21 02:42:01.898303
    (1 row)
    
    test=# set timezone=UTC; 
    SET
    test=# show timezone; 
    TimeZone 
    ----------
    UTC
    (1 row)
    
    test=# select now()::timestamp with time zone, now()::timestamp without time zone;
    now | now 
    -------------------------------+----------------------------
    2019-08-20 18:42:09.018571+00 | 2019-08-20 18:42:09.018571
    (1 row)

    北京、上海都是PRC东八区,时间是一样的

    test=# set timezone="Asia/Shanghai"; 
    SET
    test=# show timezone; 
    TimeZone 
    ---------------
    Asia/Shanghai
    (1 row)
    
    test=# select now()::timestamp with time zone, now()::timestamp without time zone;
    now | now 
    -------------------------------+----------------------------
    2019-08-21 02:51:26.704907+08 | 2019-08-21 02:51:26.704907
    (1 row)
    
    test=# set timezone="Asia/Beijing"; 
    SET
    test=# select now()::timestamp with time zone, now()::timestamp without time zone;
    now | now 
    -------------------------------+----------------------------
    2019-08-21 02:51:41.534930+08 | 2019-08-21 02:51:41.534930
    (1 row)
    
    test=# set timezone=PRC; 
    SET
    test=# select now()::timestamp with time zone, now()::timestamp without time zone;
    now | now 
    -------------------------------+----------------------------
    2019-08-21 02:51:54.704583+08 | 2019-08-21 02:51:54.704583
    (1 row)
  • 相关阅读:
    自定义异常
    java代码中正则表达式
    mybatis中代码如何实现批量添加
    List集合的三种遍历方式的效率问题
    4种方式配置不同作用域的jvm的堆栈内存!
    如何在Eclipse里修改端口
    如何用Eclipse打jar包
    用explain来解析sql语句,然后建立正确的索引
    quartz简单demo,教你最快使用quartz
    log4j.properties配置详解
  • 原文地址:https://www.cnblogs.com/kuang17/p/11384926.html
Copyright © 2020-2023  润新知