Mysql:时区问题

2024-07-10 1186阅读

Mysql:时区问题

Mysql:时区问题
(图片来源网络,侵删)

1、时区配置

  • Mysql默认使用系统的时区
    mysql> show global variables like '%time%zone%';
    +------------------+--------+
    | Variable_name    | Value  |
    +------------------+--------+
    | system_time_zone |        |
    | time_zone        | SYSTEM |	# 表明使用系统时间
    +------------------+--------+
    2 rows in set, 1 warning (0.17 sec)
    mysql>
    
    • 在Mysql配置文件中设置时区

      修改完配置之后,需要重启MySQL服务,否则不生效。

      [mysqld]
      # 设置默认时区
      # default-time-zone='+08:00'
      

      修改之后在终端查看是否生效

      mysql> show variables like '%time_zone%';
      +------------------+--------+
      | Variable_name    | Value  |
      +------------------+--------+
      | system_time_zone |        |
      | time_zone        | +08:00 |
      +------------------+--------+
      2 rows in set, 1 warning (0.03 sec)
      mysql>
      # 设置新的时区
      mysql>  SET TIME_ZONE = '-6:00';
      Query OK, 0 rows affected (0.00 sec)
      # 查看设置的时区是否生效
      mysql> show variables like '%time_zone%';
      +------------------+--------+
      | Variable_name    | Value  |
      +------------------+--------+
      | system_time_zone |        |
      | time_zone        | -06:00 |
      +------------------+--------+
      2 rows in set, 1 warning (0.00 sec)
      mysql> 
      

      2、时区影响了什么

      2.1、now() curtime()系统函数的影响

      mysql> select now(), curtime();
      +---------------------+-----------+
      | now()               | curtime() |
      +---------------------+-----------+
      | 2024-07-09 16:27:06 | 16:27:06  |
      +---------------------+-----------+
      1 row in set (0.02 sec)
      mysql>
      mysql>
      mysql>  show variables like '%time_zone%';
      +------------------+--------+
      | Variable_name    | Value  |
      +------------------+--------+
      | system_time_zone |        |
      | time_zone        | SYSTEM |
      +------------------+--------+
      2 rows in set, 1 warning (0.00 sec)
      mysql>
      mysql>
      mysql> SET TIME_ZONE = '-6:00';
      Query OK, 0 rows affected (0.00 sec)
      mysql>  show variables like '%time_zone%';
      +------------------+--------+
      | Variable_name    | Value  |
      +------------------+--------+
      | system_time_zone |        |
      | time_zone        | -06:00 |
      +------------------+--------+
      2 rows in set, 1 warning (0.00 sec)
      # 修改时区之后,系统返回返回的值相应的也变化了
      mysql> select now(), curtime();
      +---------------------+-----------+
      | now()               | curtime() |
      +---------------------+-----------+
      | 2024-07-09 02:28:03 | 02:28:03  |
      +---------------------+-----------+
      1 row in set (0.00 sec)
      mysql>
      

      2.2、timestamp 数据类型字段存储的数据受时区影响

      • timestamp 数据类型会存储当时session的时区信息,读取时会根据当前 session 的时区进行转换;

      • datetime 数据类型插入的是什么值,再读取就是什么值,不受时区影响。

        也可以理解为已经存储的数据是不会变的,只是 timestamp 类型数据在读取时会根据时区转换。

        mysql> show global variables like '%time%zone%';
        +------------------+--------+
        | Variable_name    | Value  |
        +------------------+--------+
        | system_time_zone |        |
        | time_zone        | SYSTEM |
        +------------------+--------+
        2 rows in set, 1 warning (0.17 sec)
        mysql> create table datedemo
            -> (
            ->  mydatetime datetime,
            ->  mytimestamp timestamp
            -> );
        Query OK, 0 rows affected (0.17 sec)
        mysql>  select * from datedemo;
        +---------------------+---------------------+
        | mydatetime          | mytimestamp         |
        +---------------------+---------------------+
        | 2024-07-09 16:06:32 | 2024-07-09 16:06:32 |
        | 2024-07-09 16:07:09 | NULL                |
        | NULL                | NULL                |
        +---------------------+---------------------+
        3 rows in set (0.01 sec)
        mysql>  SET TIME_ZONE = '-6:00';
        Query OK, 0 rows affected (0.00 sec)
        mysql> show variables like '%time_zone%';
        +------------------+--------+
        | Variable_name    | Value  |
        +------------------+--------+
        | system_time_zone |        |
        | time_zone        | -06:00 |
        +------------------+--------+
        2 rows in set, 1 warning (0.00 sec)
        mysql> select * from datedemo;
        +---------------------+---------------------+
        | mydatetime          | mytimestamp         |
        +---------------------+---------------------+
        | 2024-07-09 16:06:32 | 2024-07-09 02:06:32 |# mytimestamp字段显示的值发生了转换
        | 2024-07-09 16:07:09 | NULL                |
        | NULL                | NULL                |
        +---------------------+---------------------+
        3 rows in set (0.00 sec)
        mysql>
        
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]