无法加载时区?

Abe*_*ler 24 mysql database

我正在尝试将时区加载到我的MySql实例(在Ubuntu上运行),以便我可以使用CONVERT_TZ函数,但是当我运行以下命令时:

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

我得到以下输出,当我尝试使用CONVERT_TZ它时,只返回NULL:

警告:无法加载'/ usr/share/zoneinfo/Asia/Riyadh87'作为时区.跳过它.警告:无法加载'/ usr/share/zoneinfo/Asia/Riyadh88'作为时区.跳过它.警告:无法加载'/ usr/share/zoneinfo/Asia/Riyadh89'作为时区.跳过它.警告:无法加载'/ usr/share/zoneinfo/Mideast/Riyadh87'作为时区.跳过它.警告:无法加载'/ usr/share/zoneinfo/Mideast/Riyadh88'作为时区.跳过它.警告:无法加载'/ usr/share/zoneinfo/Mideast/Riyadh89'作为时区.跳过它.警告:无法加载'/usr/share/zoneinfo/iso3166.tab'作为时区.跳过它.警告:无法加载'/ usr/share/zoneinfo/posix/Asia/Riyadh87'作为时区.跳过它.警告:无法加载'/ usr/share/zoneinfo/posix/Asia/Riyadh88'作为时区.跳过它.警告:无法加载'/ usr/share/zoneinfo/posix/Asia/Riyadh89'作为时区.跳过它.警告:无法加载'/ usr/share/zoneinfo/posix/Mideast/Riyadh87'作为时区.跳过它.警告:无法加载'/ usr/share/zoneinfo/posix/Mideast/Riyadh88'作为时区.跳过它.警告:无法加载'/ usr/share/zoneinfo/posix/Mideast/Riyadh89'作为时区.跳过它.警告:无法加载'/ usr/share/zoneinfo/right/Asia/Riyadh87'作为时区.跳过它.警告:无法加载'/ usr/share/zoneinfo/right/Asia/Riyadh88'作为时区.跳过它.警告:无法加载'/ usr/share/zoneinfo/right/Asia/Riyadh89'作为时区.跳过它.警告:无法加载'/ usr/share/zoneinfo/right/Mideast/Riyadh87'作为时区.跳过它.警告:无法加载'/ usr/share/zoneinfo/right/Mideast/Riyadh88'作为时区.跳过它.警告:无法加载'/ usr/share/zoneinfo/right/Mideast/Riyadh89'作为时区.跳过它.警告:无法将'/usr/share/zoneinfo/zone.tab'作为时区加载.跳过它.

有谁知道为什么会发生这种情况?

PS:

我正在使用以下方法来转换日期时间:

CONVERT_TZ(NOW(),'UTC', 'PCT')
Run Code Online (Sandbox Code Playgroud)

是否有可能我只是错误地转换,这是NULL结果的原因?

Syl*_*oux 25

这是Debian上Riyadh*的时区文件的错误:

http://bugs.mysql.com/bug.php?id=20545

建议的解决方法是简单地忽略警告(如果您当然不需要这些时区):

mysql_tzinfo_to_sql /usr/share/lib/zoneinfo | mysql -uroot --force mysql
Run Code Online (Sandbox Code Playgroud)

使用该--force选项导入TZ数据后,您就可以使用了CONVERT_TZ.这是我刚才所做的转录:

sh$ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -uroot -p mysql --force 2> /dev/null
Enter password: ********
sh$ mysql -p
Enter password: ********
Server version: 5.1.49-3 (Debian)

mysql> select convert_tz(now(), 'UTC', 'CET');
+---------------------------------+
| convert_tz(now(), 'UTC', 'CET') |
+---------------------------------+
| 2013-08-13 21:04:34             |
+---------------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

  • @AbeMiessler:D如果对TZ名称有疑问,可以查询`mysql.time_zone_name`进行快速检查.如果你的特殊情况:`从mysql.time_zone_name中选择名称,其名称如'%PST%';` (3认同)

Jon*_*que 5

不幸的是,Sylvain 的解决方案对我不起作用。

通过从PHPMyAdmin我的开发计算机(在 Windows 上)导出表并稍微调整创建脚本,我能够填充我们生产服务器的时区表。

由于脚本太长,无法在帖子中共享,我将其托管在我的 Google 云端硬盘中。

安装脚本(删除了新行和注释):

https://drive.google.com/file/d/0B7iwL5F-hwr_YkItRXk2Z1VZdlE/view?usp=sharing

带注释的脚本:

https://drive.google.com/file/d/0B7iwL5F-hwr_dWdjTDREcXNHQmM/view?usp=sharing

确保使用没有注释的版本。评论版本大约需要 5 分钟才能运行,但由于某种原因最终失败,而剥离版本的运行时间不到 5 秒。

注意:您可能需要运行 asroot才能使其正常工作。