解决django报错“Database returned an invalid datetime value. Are time zone definitions for your database

问题

        博客:lmark.cc

今天写Django项目,创建订单时遇到个bug MySQL backend does notsupport timezone-aware datetimes when USE TZ is False

image-20250714003023910

我把Django的USE_TZ关掉时,他说我mysql不支持,我去打开之后,能创建订单了,但是admin里商品显示有问题了,报错"Database returned an invalid datetime value. Are time zone definitions for your database installed?" 然后网上查教程让我把这个选项USE_TZ时区支持打开(Django5.0默认打开)。一根筋变成两头堵了。

解决

研究了好久,比如给我mysql加上 SET time_zone = '+08:00'再重启,没用。还是一样报错。后面查了好久才发现,原来是我的mysql数据库里没时区信息,虽然不知道为什么都2025年了,默认不自带时区信息。

Linux下使用命令:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql

即可写入时区信息,Windows比较麻烦,得去官网下一个时区的sql文件MySQL :: Time zone description tables

image-20250714003954553

timezone_2025b_posix_sql.zip下载,然后解压出sql文件在数据库里执行一下就行了,大概看了一下,里面都是些时区名字和时间偏移的对应关系。如下图所示:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值