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

Django迁移Cpanel共享主机后MySQL时区错误:PhpMyAdmin解决方案

解决Django迁移到Cpanel共享主机+MySQL后的时区错误问题

问题重现

将Django应用从VPS迁移到Cpanel共享主机,同时将数据库从PostgreSQL切换为MySQL后,访问包含created_at datetime字段的对象时触发错误:

Database returned an invalid datetime value. Are time zone definitions for your database installed?

可用解决方案

方案一:通过PhpMyAdmin导入MySQL时区表(需有权限访问系统mysql数据库)

  1. 导出时区表数据
    • 在已配置好时区表的MySQL环境(比如本地开发机)中打开PhpMyAdmin,进入mysql系统数据库。
    • 选中time_zone、time_zone_leap_second、time_zone_name、time_zone_transition、time_zone_transition_type这5个表,点击「导出」,选择SQL格式,导出包含表结构和数据的脚本文件。
  2. 导入到共享主机的MySQL
    • 登录共享主机的PhpMyAdmin,找到mysql数据库(需主机商允许访问该系统库)。
    • 点击「导入」,选择刚才导出的SQL文件,执行导入操作。
    • 导入完成后,联系主机商帮忙重启MySQL服务,确保时区表生效。

方案二:修改Django配置绕过时区依赖(无需服务器权限)

如果无法访问系统mysql数据库,可通过调整Django设置解决:

  1. 打开项目的settings.py文件,修改数据库配置,添加连接初始化命令强制使用UTC时区:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': '你的数据库名',
            'USER': '你的数据库用户',
            'PASSWORD': '你的数据库密码',
            'HOST': 'localhost',
            'PORT': '',
            'OPTIONS': {
                'init_command': "SET sql_mode='STRICT_TRANS_TABLES', time_zone = '+00:00'",
            },
        }
    }
    
  2. 若你的业务不需要时区感知功能,可直接将settings.py中的USE_TZ = True修改为USE_TZ = False,Django会使用本地时间,不再依赖MySQL的时区表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:10:34