最近有用戶(hù)反饋在使用mysql8的過(guò)程中,發(fā)現(xiàn)時(shí)間錯(cuò)亂的情況。下面我們探究一下這個(gè)問(wèn)題的成因和解決方法。
首先,我們需要了解mysql8中時(shí)間的存儲(chǔ)方式。mysql8中,時(shí)間存儲(chǔ)的方式是基于UTC時(shí)間的,也就是協(xié)調(diào)世界時(shí)(Coordinated Universal Time),是不帶時(shí)區(qū)信息的。而之前的版本中,時(shí)間存儲(chǔ)方式是帶時(shí)區(qū)信息的。
mysql>SELECT @@global.time_zone; +--------------------+ | @@global.time_zone | +--------------------+ | SYSTEM | +--------------------+ mysql>SELECT @@session.time_zone; +---------------------+ | @@session.time_zone | +---------------------+ | SYSTEM | +---------------------+
上面這個(gè)代碼塊可以看出,mysql8默認(rèn)使用的是系統(tǒng)時(shí)區(qū)。因此,如果在修改系統(tǒng)時(shí)區(qū)的時(shí)候,不及時(shí)修改mysql的時(shí)區(qū)設(shè)置,就有可能出現(xiàn)時(shí)間錯(cuò)亂的情況。
那么我們?cè)撊绾谓鉀Q這個(gè)問(wèn)題呢?
第一種解決方法是修改mysql的時(shí)區(qū)設(shè)置,可以在mysql的配置文件中添加如下一行代碼:
[mysqld] default-time-zone=+08:00
這樣就將mysql的時(shí)區(qū)設(shè)置為東八區(qū)了。
如果不想修改mysql的時(shí)區(qū)設(shè)置,也可以對(duì)于當(dāng)前的會(huì)話設(shè)置時(shí)區(qū),可以使用如下代碼:
SET time_zone = '+08:00';
這兩種方法都可以有效的解決mysql8時(shí)間錯(cuò)亂的問(wèn)題。