CONVERT_TZ返回null(convert_tz returns null)

2019-07-18 12:41发布

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

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta') AS time

它输出NULL。 我使用MySQL工作台在Ubuntu 12.04 64位,并且在我的其他笔记本/ OS(也使用MySQL工作台)的作品。

Answer 1:

如果你还没有装载时区表到MySQL会发生这种情况。

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


Answer 2:

我发现这个线程花一些时间来尝试,为什么在接受的答案运行命令(这是同在MySQL的开发站点)的命令不能时区之间进行转换,如后弄清楚后

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','MET') AS time

事实证明,在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

充分填充所有的预期时区信息。

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

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.11, for osx10.6 (x86_64) using  EditLine wrapper

我也运行在STRICT_MODE

在任何情况下,我希望这可以节省的人寻找修复了几个难题。



Answer 3:

除了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 \数据\ mysql的)`

4. Start MySQL server

..Your工作结束..

如果你仍然越来越NULLCONVERT_TZ下载这些数据库表并将其插入到mysql数据库http://www.4shared.com/folder/Toba2qu-/Mysql_timezone.html

现在,您的问题将得到解决.. :)



Answer 4:

如果你正在使用MySQL在Windows上,你必须将时区数据加载到MySQL的架构。 这里是一个很好HOWTO: http://www.geeksengine.com/article/populate-time-zone-data-for-mysql.html

如果你不这样做,该功能将CONVERT_TZ不能识别你的输入时区(即你的例子:“UTC”,'亚洲/雅加达),并会简单的返回NULL。



Answer 5:

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

如果你的错误data too long for column 'abbreviation' at row 1 ,然后看到: https://bugs.mysql.com/bug.php?id=68861

该解决将是运行以下

这将增加一行以禁用MySQL的模式,并允许MySQL的(根据上述链接)来插入截断数据,这是因为一个MySQL臭虫MySQL的将在末尾添加一个空字符的

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
(if the above gives error "data too long for column 'abbreviation' at row 1")
mysql_tzinfo_to_sql /usr/share/zoneinfo > /tmp/zut.sql

echo "SET SESSION SQL_MODE = '';" > /tmp/mysql_tzinfo_to.sql
cat /tmp/zut.sql >> /tmp/mysql_tzinfo_to.sql

mysql --defaults-file=/etc/mysql/my.cnf --user=verifiedscratch -p mysql < /tmp/mysql_tzinfo_to.sql


Answer 6:

1)在Windows中,没有任何数据文件夹现在在C:\Program Files\MySQL\在其他的答案。

2)在这种情况下,寻找C:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql 。 通常这个文件夹隐藏的,你不会看到C:\ProgramData\一些时间。

3)更改设置在查看选项卡查看隐藏文件和文件夹,如下解释https://irch.info/index.php?pg=kb.page&id=133

4)通过搜索Windows开始按钮“服务”停止MySQL服务。

5)然后解压timezone_2017c_posix.zip,然后将文件复制它(文件直接复制,不要复制整个文件夹本身),并粘贴在C:\ProgramData\MySQL\MySQLServer5.x\Data\mysql\

6)对于MySQL 5.7,timezone_2017c_posix.zip只会给解压缩后.sql文件,它可能不会解决问题。 所以,尽管下载5.6的zip文件,即使您运行MySQL 5.7和这些文件复制到C:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql\

7)重新启动MySQL服务器。 要检查是否CONVERT_TZ()工作,运行该SQL查询。

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta'); 并检查非空输出。



Answer 7:

这些都使,如果你在Windows和使用MySQL 5.7它的工作步骤。

  1. 右击我的电脑/电脑/ PC这或在您的操作系统的任何名称并选择属性。
  2. 选择左侧面板中的“高级系统设置”。
  3. 选择 “环境变量”,输入您的MySQL bin目录的完整路径名(通常这将是C:\ Program Files文件\的MySQL \ MySQL服务器5.7 \ BIN)。
  4. 打开命令提示符,输入使用到MySQL mysql -u root -p password
  5. 输入use mysql选择MySQL数据库。
  6. 下载文件“timezone_YYYYc_posix_sql.zip”(在YYYY的地方,以替代2017年一样或2018页可用的最大年)从https://dev.mysql.com/downloads/timezones.html 。
  7. 解压缩并在文本编辑器打开该文件。
  8. 复制的内容,并在cmd提示符下执行。

成功完成后,你应该能够使用CONVERT_TZ和其他时区的功能。



Answer 8:

MAMP PRO

  1. 打开Terminal
  2. cd /usr/share/zoneinfo/
  3. sudo mv +VERSION ~/Desktop
  4. cd /applications/MAMP/Library/bin
  5. sudo ./mysql_tzinfo_to_sql /usr/share/zoneinfo | ./mysql -p -u root mysql
  6. sudo mv ~/Desktop/+VERSION /usr/share/zoneinfo/


文章来源: convert_tz returns null