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数据库)
- 导出时区表数据
- 在已配置好时区表的MySQL环境(比如本地开发机)中打开PhpMyAdmin,进入
mysql系统数据库。 - 选中
time_zone、time_zone_leap_second、time_zone_name、time_zone_transition、time_zone_transition_type这5个表,点击「导出」,选择SQL格式,导出包含表结构和数据的脚本文件。
- 在已配置好时区表的MySQL环境(比如本地开发机)中打开PhpMyAdmin,进入
- 导入到共享主机的MySQL
- 登录共享主机的PhpMyAdmin,找到
mysql数据库(需主机商允许访问该系统库)。 - 点击「导入」,选择刚才导出的SQL文件,执行导入操作。
- 导入完成后,联系主机商帮忙重启MySQL服务,确保时区表生效。
- 登录共享主机的PhpMyAdmin,找到
方案二:修改Django配置绕过时区依赖(无需服务器权限)
如果无法访问系统mysql数据库,可通过调整Django设置解决:
- 打开项目的
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'", }, } } - 若你的业务不需要时区感知功能,可直接将
settings.py中的USE_TZ = True修改为USE_TZ = False,Django会使用本地时间,不再依赖MySQL的时区表。
内容的提问来源于stack exchange,提问作者Ahmed Wagdi
相关产品推荐
相关产品推荐

