美文网首页
mysql时区问题

mysql时区问题

作者: 小小了墨 | 来源:发表于2019-08-13 11:45 被阅读0次

    mysql时区问题

    查询mysql时区

    我在使用mysql时,与实际的时间相差了8小时

    通过命令查出mysql的时区

    mysql > show variables like '%time_zone%';
    
    +------------------+--------+
    | Variable_name    | Value  |
    +------------------+--------+
    | system_time_zone | UTC    |
    | time_zone        | SYSTEM |
    
    

    所以出现相差了8个小时的时区问题

    • system_time_zone:是只读的,在每次启动mysql时读取系统的时区。
    • time_zone:默认值是SYSTEM, 走的系统时间。

    修改mysql时区

    1. 修改docker中启动的mysql
      由于我使用的是docker启动的服务,所以这个是在docker中使用mysql的修改方法,进入到容器中,修改/etc/mysql/my.cnf
    # my.cnf
    
    [mysqld]
    default-time-zone = '+08:00'
    

    在[mysqld]下追加default-time-zone = '+08:00'

    注意:如果表字段类型是datetime,它不支持时区的动态变换,存储数据的时候没有时区的概念;如果想要有时区概念,那么要用timestamp类型的

    上面的方法不是很好,最好是通过修改外部挂载或者连接mysql时区修改

    1. 连接时去临时修改
    • 使用npm包中的mysql,直接追加参数
    const mysql = require('mysql')
    const defaultOptions = {}
    const options = {
        ...defaultOptions,
        timezone: '+08:00'
    }
    const connection = mysql.createConnectin(options)
    connection.connect();
    // ...
    connection.end();
    
    • 使用egg-mysql时,由于文档上说使用的是ali-rds,而ali-rds又使用的是mysqlnpm包连接的,所以应该差不多
    # config/config.default.js
    config.mysql = {
        client: {
              host: 'host',
              port: 3306,
              user: 'user',
              password: 'password',
              database: 'database',
              timezone: '+08:00'
        },
        app: true,
        agent: false
    }
    

    在修改my.cnf时遇到的问题

    使用bash进入容器后,无法用vi或者vim去编辑修改,这里使用其他方式

    $ echo default-time-zone = "'+08:00'" >> my.cnf
    
    

    注意:"'+08:00'"这里加双引号是为了将单引号输入进去,不加将忽视单引号

    如果添加错了,通过下面命令删除再重新输入

    # 定义记录行数的变量
    $ A=$(sed -n '$=' my.cnf)
    # 删除指定行数的,这里是最后一行
    $ sed $(($A)),${A}d -i my.cnf
    

    这是删除最后一行的,如果想删除指定行数的文本:

    • sed $(($A)),${A-n+1}d -i my.cnf删除倒数第n行的文本
    • sed $(($A)),${n}d -i my.cnf删除正数第n行的文本

    相关文章

      网友评论

          本文标题:mysql时区问题

          本文链接:https://www.haomeiwen.com/subject/vsevjctx.html