You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB Timestamp与Django DateTimeField存在1小时时差求助

解决方案

1. 检查并修正MariaDB连接时区

登录python manage.py dbshell,执行命令查看数据库时区配置:

SELECT @@global.time_zone, @@session.time_zone;

如果返回结果包含SYSTEM,说明数据库继承了系统时区,而系统时区(CET,UTC+1)与Django配置的TIME_ZONE = 'UTC'冲突,会导致时间转换偏差。

解决方法:在Django的数据库配置中强制设置连接时区为UTC,修改settings.py的DATABASES项:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'your_db_user',
        'PASSWORD': 'your_db_password',
        'HOST': 'localhost',
        'PORT': '3306',
        'OPTIONS': {
            'init_command': "SET time_zone = '+00:00';",
            'charset': 'utf8mb4',
        },
    }
}

2. 确认模型字段定义合规

确保模型中的时间字段使用标准DateTimeField,不手动处理时区逻辑:

from django.db import models

class Time(models.Model):
    timestamp = models.DateTimeField()  # 自动生成时间可添加auto_now_add=True参数

当USE_TZ = True时,Django会自动完成UTC时间与配置时区的转换,无需额外修改字段属性。

3. 排查系统时区与依赖版本

  • 检查运行Django的服务器系统时区是否正确设置为CET,避免mysqlclient继承错误时区导致转换异常。
  • 升级mysqlclient到最新稳定版(当前为2.2.3),修复旧版本可能存在的时区处理bug:
pip install --upgrade mysqlclient

4. 重新验证时间读取

修改配置后重启Django服务,进入python manage.py shell测试:

from testapp.models import Time
record = Time.objects.first()
print(record.timestamp)
print(record.timestamp.tzinfo)  # 正常应显示UTC或配置的TIME_ZONE值

内容的提问来源于stack exchange,提问作者Profix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:05:16