我知道这听起来很愚蠢,但是当我使用
SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta') AS time
它输出NULL。 我使用MySQL工作台在Ubuntu 12.04 64位,并且在我的其他笔记本/ OS(也使用MySQL工作台)的作品。
我知道这听起来很愚蠢,但是当我使用
SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta') AS time
它输出NULL。 我使用MySQL工作台在Ubuntu 12.04 64位,并且在我的其他笔记本/ OS(也使用MySQL工作台)的作品。
如果你还没有装载时区表到MySQL会发生这种情况。
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
我发现这个线程花一些时间来尝试,为什么在接受的答案运行命令(这是同在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
。
在任何情况下,我希望这可以节省的人寻找修复了几个难题。
除了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工作结束..
如果你仍然越来越NULL
了CONVERT_TZ
下载这些数据库表并将其插入到mysql数据库http://www.4shared.com/folder/Toba2qu-/Mysql_timezone.html
现在,您的问题将得到解决.. :)
如果你正在使用MySQL在Windows上,你必须将时区数据加载到MySQL的架构。 这里是一个很好HOWTO: http://www.geeksengine.com/article/populate-time-zone-data-for-mysql.html
如果你不这样做,该功能将CONVERT_TZ不能识别你的输入时区(即你的例子:“UTC”,'亚洲/雅加达),并会简单的返回NULL。
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
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');
并检查非空输出。
这些都使,如果你在Windows和使用MySQL 5.7它的工作步骤。
mysql -u root -p password
。 use mysql
选择MySQL数据库。 成功完成后,你应该能够使用CONVERT_TZ
和其他时区的功能。
MAMP PRO
Terminal
cd /usr/share/zoneinfo/
sudo mv +VERSION ~/Desktop
cd /applications/MAMP/Library/bin
sudo ./mysql_tzinfo_to_sql /usr/share/zoneinfo | ./mysql -p -u root mysql
sudo mv ~/Desktop/+VERSION /usr/share/zoneinfo/