如何修改MySQL CURRENT_TIMESTAMP



在我的应用程序中,有一个名为created_at的字段预定义为CURRENT_TIMESTAMP。我的所有应用程序(PHP(都配置为timezone America/Recife -03,但当我插入数据时,它会保存到另一个时区,例如当前时间是20:34,保存为11:34。

环境

  • 操作系统:[Debian 9Strech]
  • 数据库:[10.1.48-MariaDB]

到目前为止我做了什么

我已经修改了我需要的本地时间和RTC。

OS时间

  • date输出:2021年5月1日星期六20:42:05-03
  • timedatectl输出:Local time: Sat 2021-05-01 20:42:16 -03Universal time: Sat 2021-05-01 23:42:16 UTCRTC time: Sat 2021-05-01 20:42:16Time zone: America/Recife (-03, -0300)

基于MySQL关于timestamp数据类型的文档:

MySQL将TIMESTAMP值从当前时区转换为UTC进行存储,并从UTC转换回当前时区进行检索。(其他类型(如DATETIME(不会发生这种情况。(默认情况下,每个连接的当前时区是服务器的时间。可以根据每个连接设置时区。只要时区设置保持不变,您就会得到与存储的值相同的值。如果存储TIMESTAMP值,然后更改时区并检索该值,则检索到的值与存储的值不同。

如果您在数据库之外进行某种时区操作,可能会弄乱您的时间戳值,因此产生9小时的差异。

最新更新