mysql 通过客户端执行now()函数,时差为8小时

1.场景演示

假设当前北京时间是:2023-02-17 19:31:37。明显执行出来的结果和实际时间晚8小时。
所用Mysql版本为:

解决方式:
需要在my.conf文件中的[mysqld]下添加

default-time-zone=Asia/Shanghai 

由于这个mysql8.0是通过 docker 安装的,当时配置文件采用的是挂载的方式。所以不需要进入mysql容器内修改配置。修改挂载文件就行。修改完重启容器会自动同步到mysql容器内。
查看mysql 容器挂载目录:

最右侧的那一列是容器名:此次我们需要修改配置的是名为mysql8.0的mysql容器。

[root@iZ2Aeffpfo87fi4m4dlxo8dZ conf]# docker inspect mysql8.0 | grep Mounts -A 24
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/mysql8.0/conf",
                "Destination": "/etc/mysql",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/mysql8.0/data",
                "Destination": "/var/lib/mysql",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/mysql8.0/logs",
                "Destination": "/var/log/mysql",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }

根据 查询可以知道挂载目录在/mysql8.0/conf下

[root@iZ0zafdax87fw9m4dlx78dZ conf]# vim my.cnf 

[mysqld]
default-time-zone=Asia/Shanghai  #添加这一行
user=mysql
bind-address=0.0.0.0
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
lower_case_table_names=1
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

保存,然后重启 docker restart mysql8.0。
然后再执行SELECT NOW(),CURDATE(),CURTIME(); 可以看到时间已经变成北京时间了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: MySQL中的YEAR函数用于提取日期或日期/时间表达式中的年份部分。它的语法如下: YEAR(date) 其中date是一个日期或日期/时间表达式。 MySQL中的NOW函数用于返回当前日期和时间。它的语法如下: NOW() 它不需要任何参数,直接调用即可返回当前日期和时间。 ### 回答2: MySQL的YEAR()函数和NOW()函数是两个常用的日期和时间函数。 YEAR()函数用于提取日期中的年份。它的基本语法是: YEAR(date) 其中,date表示日期值或日期表达式。YEAR()函数返回一个整数,表示指定日期的年份。 例如,假设有一个名为orders的表,其中有一个名为order_date的日期列,存储了订单的日期。我们可以使用YEAR()函数来提取每个订单的年份,如下所示: SELECT order_date, YEAR(order_date) AS order_year FROM orders; 这样就可以得到每个订单的日期和年份。 而NOW()函数用于获取当前的日期和时间。它的基本语法是: NOW() 它返回一个DATETIME类型的值,表示当前的日期和时间。 例如,我们可以使用NOW()函数来插入一条新的记录,并将当前的日期和时间作为其中的一个列值,如下所示: INSERT INTO orders (order_date) VALUES (NOW()); 这样就可以将当前的日期和时间插入到订单表中的order_date列中。 总结起来,YEAR()函数用于提取日期的年份,而NOW()函数用于获取当前的日期和时间。它们都是MySQL中常用的日期和时间函数,提供了方便的日期和时间操作和处理能力。 ### 回答3: MySQL中的YEAR函数用于提取日期或日期时间值的年份部分。它接受一个日期或日期时间值作为参数,并返回一个整数值代表年份。 例如,使用YEAR函数提取日期值的年份: SELECT YEAR('2022-01-01'); 这将返回2022作为结果。 另外,YEAR函数也可以用在日期时间值中: SELECT YEAR('2022-01-01 12:34:56'); 这同样返回2022作为结果。 而MYSQL中的NOW函数用于返回当前日期和时间。它没有参数,直接调用即可。 例如,使用NOW函数获取当前日期和时间: SELECT NOW(); 这将返回类似于'2022-01-01 12:34:56'的结果。 总结起来,YEAR函数用于提取日期或日期时间值的年份部分,而NOW函数用于获取当前日期和时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值