解决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
posted @ 2020-03-17 17:04  毛珑珑  阅读(261)  评论(0)    收藏  举报