mysql时区问题

2019-08-13  本文已影响0人  小小了墨

mysql时区问题

查询mysql时区

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

通过命令查出mysql的时区

mysql > show variables like '%time_zone%';

+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | SYSTEM |

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

修改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. 连接时去临时修改
const mysql = require('mysql')
const defaultOptions = {}
const options = {
    ...defaultOptions,
    timezone: '+08:00'
}
const connection = mysql.createConnectin(options)
connection.connect();
// ...
connection.end();
# 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

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

上一篇 下一篇

猜你喜欢

热点阅读