convert_tz返回null

moh*_*hur 87 mysql ubuntu-12.04 convert-tz

我知道这听起来很愚蠢,但是当我使用时

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta') AS time
Run Code Online (Sandbox Code Playgroud)

它输出NULL.我在Ubuntu 12.04 64位中使用MySQL Workbench,它可以在我的其他笔记本电脑/操作系统(也使用MySQL Workbench)中运行.

Bar*_*mar 156

如果您尚未将时区表加载到mysql中,则会发生这种情况.

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Run Code Online (Sandbox Code Playgroud)

  • 就一次.它将信息加载到MySQL中的表中,从那时起使用它. (3认同)
  • 我需要在它生效之前重启MySQL守护进程(在Debian上). (3认同)
  • 以防万一 - 最后一个“mysql”代表数据库名称,您应该保留它。因为首先我认为这是一个密码,所以我替换了它,然后我收到错误“未选择数据库” (3认同)
  • 您可以使用强制标志来覆盖您遇到的任何错误:mysql_tzinfo_to_sql/usr/share/zoneinfo | mysql -u root --force -p mysql (2认同)
  • 嗨,当我运行此命令时,出现如下错误:警告:无法将'/usr/share/zoneinfo/iso3166.tab'加载为时区。跳过它。警告:无法将“ /usr/share/zoneinfo/zone.tab”加载为时区。跳过它。 (2认同)
  • @TheGodfather 是的,这并不明显。这就是为什么我总是喜欢使用“--database mysql”来超级明确。 (2认同)

Jim*_*ert 24

我花了一些时间试图弄清楚为什么在接受的答案中运行命令(在MySQL的开发站点上是相同的)之后找到了这个线程,该命令无法在时区之间进行转换,例如

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','MET') AS time
Run Code Online (Sandbox Code Playgroud)

事实证明,在OS X上有两个导致问题的文件:/usr/share/zoneinfo/Factory/usr/share/zoneinfo/+VERSION.

修复...暂时将这些文件移动到不同的位置,例如/usr/share/zoneinfo/.bak/允许命令

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Run Code Online (Sandbox Code Playgroud)

完全填充所有预期的时区信息.

这可能是也可能不是我安装的MySQL版本中的错误:

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.11, for osx10.6 (x86_64) using  EditLine wrapper
Run Code Online (Sandbox Code Playgroud)

我也在经营STRICT_MODE.

在任何情况下,我希望这为搜索修复程序的任何人节省了一些麻烦.


Rak*_*hit 13

除Windows环境外,您还可以设置时区

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

Windows环境中

1. download Time zone description tables from http://dev.mysql.com/downloads/timezones.html

2. Stop MySQL server

3. Put then inside Mysql installation package (即C:\ Program Files\MySQL\data\mysql)`

4. Start MySQL server

..你的工作已经完成..

如果您仍然NULL需要CONVERT_TZ 下载这些数据库表并将其插入到mysql数据库http://www.4shared.com/folder/Toba2qu-/Mysql_timezone.html

现在你的问题将被解决.. :)