我正在尝试将时区加载到我的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)
不幸的是,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才能使其正常工作。
| 归档时间: |
|
| 查看次数: |
16967 次 |
| 最近记录: |