我知道这听起来很愚蠢,但是当我使用
时SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta') AS time
它输出NULL。我在Ubuntu 12.04 64位中使用MySQL Workbench,它可以在我的其他笔记本电脑/操作系统中使用(也使用MySQL Workbench)。
答案 0 :(得分:148)
如果您尚未将时区表加载到mysql中,则会发生这种情况。
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
答案 1 :(得分:24)
我花了一些时间试图弄清楚为什么在接受的答案中运行命令后(在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
开展工作。
无论如何,我希望这为搜索修复程序的任何人节省了一些麻烦。
答案 2 :(得分: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
现在你的问题将会解决.. :)
答案 3 :(得分:2)
如果您在Windows上使用MySql,则必须将时区数据加载到mysql架构中。这是一个很好的HOWTO:http://www.geeksengine.com/article/populate-time-zone-data-for-mysql.html
如果你不这样做,CONVERT_TZ函数将无法识别你的输入时区(即你的例子:'UTC','Asia / Jakarta'),并且只会返回NULL。
答案 4 :(得分:1)
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
答案 5 :(得分:1)
如果你在Windows中并使用MySQL 5.7,这些步骤可以使它工作。
mysql -u root -p password
输入mysql。use mysql
以选择MySQL数据库。成功完成后,您应该可以使用CONVERT_TZ
和其他时区功能。
答案 6 :(得分:1)
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');
并检查非空输出。
答案 7 :(得分:0)
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/
答案 8 :(得分:0)
在使用XAMPP的Mac OS Catalina上,
转到终端中的/ Applications / XAMPP / xamppfiles / bin文件夹,然后运行以下命令。
./ mysql_tzinfo_to_sql / usr / share / zoneinfo | sed -e“必须设置s /本地时区-请参见zic手册页/本地/” | ./mysql -u根mysql
这对我有用。