如何修改mysql数据库的时区

前言
由于在linux服务器上安装时mysql数据库,没有考虑到要设置时区,导致使用的是默认时区,使用 now() 插入时间时,时间总是少了8个小时,因此需要重新设置mysql的时区。
一、原因
虽然通过 date 在linux查看的时间是北京时间,使用 SHOW VARIABLES LIKE '%time_zone%'; 查看mysql数据库的时区是使用操作系统的时间,但实际数据库的时间不是北京时间
在设置时区时,你应该避免使用SYSTEM值,因为它可能会导致与操作系统时区的混淆。例如,CST可以表示中国标准时间(UTC+8),但在Java中可能被解释为美国中部标准时间(UTC-6)。为了避免混淆,建议直接使用如+08:00这样的偏移量来设置时区
二、解决办法
通过mysql命令行模式下动态修改
查看当前时区: 你可以通过执行SHOW VARIABLES LIKE '%time_zone%'来查看当前的全局时区和会话时区。如果time_zone的值是SYSTEM,则表示MySQL将采用操作系统的时区设置。 SHOW VARIABLES LIKE '%time_zone%';
设置会话时区: 使用SET time_zone = '+8:00'可以设置当前会话的时区,这个设置仅对当前会话有效,不会影响其他会话或者全局设置。 SET time_zone = '+8:00';
设置全局时区: 使用SET GLOBAL time_zone = '+8:00'可以设置全局时区,这将影响新的会话。已经存在的会话需要重新连接才能应用新的时区设置。 SET GLOBAL time_zone = '+8:00'; 为了使设置立即生效,你可能需要执行FLUSH PRIVILEGES,但这并不总是必要的。
通过修改my.cnf配置文件来修改时区
如果你希望MySQL的时区设置在服务重启后仍然保持,你可以在MySQL的配置文件中设置时区。通常这个文件被称为my.cnf或my.ini,位于MySQL服务器的安装目录下。编辑配置文件: 在[mysqld]部分添加default-time-zone='+8:00'来设置默认时区。 [mysqld] default-time-zone='+8:00'
重启MySQL服务: 修改配置文件后,你需要重启MySQL服务来使更改生效。 service mysql restart
参考