解决Django在MySQL中进行时区转换时查询结果为空的问题
问题描述
出现这种情况通常是Django在查询中调用了MySQL中的CONVERT_TZ函数
尝试在mysql中直接执行CONVERT_TZ,值为空。
mysql> SELECT CONVERT_TZ('2020-03-08 00:00:00','UTC','Asia/Shanghai');
+--------------------------------------------------------+
| CONVERT_TZ('2020-03-08 00:00:00','UTC','Asia/Shanghai')|
+--------------------------------------------------------+
| NULL |
+--------------------------------------------------------+
但是下面的语句可以成功返回
mysql> SELECT CONVERT_TZ('2020-03-08 00:00:00','+00:00','+08:00');
+-----------------------------------------------------+
| CONVERT_TZ('2020-03-08 00:00:00','+00:00','+08:00') |
+-----------------------------------------------------+
| 2020-03-08 08:00:00 |
+-----------------------------------------------------+
说明mysql缺失了时区信息。
解决方法
搬运自 mysql官方文档
- Linux
可以直接把系统的时区文件导入到mysql,一条命令即可:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
- Windows
下载mysql官方提供的 sql脚本,同样也是一行代码搞定:
mysql -u root -p mysql < file_name

浙公网安备 33010602011771号