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

如何解决生产环境中Django+MySQL的1292错误码问题?

解决Django部署到Linux+cPanel环境后MySQL日期格式错误问题

错误提示显示MySQL无法识别带时区偏移的datetime格式(2023-07-23 09:41:00+00:00),这是因为生产环境的MySQL配置与本地Windows环境存在差异,以下是几种可行的解决方法:

1. 统一Django与MySQL的时区配置

在项目的settings.py中,确保时区相关配置正确,并给数据库连接添加时区初始化命令:

USE_TZ = True
TIME_ZONE = 'UTC'  # 或你的实际时区,比如'Asia/Shanghai'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '你的数据库名',
        'USER': '你的数据库用户',
        'PASSWORD': '你的数据库密码',
        'HOST': 'localhost',
        'PORT': '3306',
        'OPTIONS': {
            # 初始化时设置MySQL时区与Django一致,同时启用严格模式
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES', time_zone='+00:00'",
        },
    }
}

注意time_zone的值要和TIME_ZONE对应,比如TIME_ZONE = 'Asia/Shanghai'时,time_zone设为'+08:00'。

2. 修改MySQL全局时区配置

如果拥有服务器权限,直接调整MySQL的时区设置:

  • 登录MySQL执行以下SQL命令:
SET GLOBAL time_zone = '+00:00';
SET time_zone = '+00:00';
FLUSH PRIVILEGES;
  • 或者通过cPanel的数据库管理工具,找到MySQL配置文件(通常是my.cnf或my.ini),添加以下配置后重启MySQL服务:
default-time-zone='+00:00'

3. 调整模型字段的日期处理逻辑

如果你的业务不需要时区支持,可以在保存数据前将带时区的datetime转换为无时区格式:

from django.utils.timezone import make_naive, get_current_timezone

# 示例:保存模型实例前处理日期字段
your_model_instance.date_field = make_naive(your_model_instance.date_field, timezone=get_current_timezone())
your_model_instance.save()

如果需要时区支持,确保你的MySQL版本在5.6及以上,并且已经加载了时区数据(可通过mysql_tzinfo_to_sql工具导入)。

4. 检查cPanel的MySQL sql_mode配置

cPanel环境下的MySQL可能默认启用了严格的日期校验模式,导致带时区的格式被拒绝。可以在settings.py的数据库OPTIONS中调整sql_mode,比如移除严格校验(仅临时测试用,不推荐长期使用):

'OPTIONS': {
    'init_command': "SET sql_mode='', time_zone='+00:00'",
},

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:12:33