116

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

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

它输出NULL。我在 Ubuntu 12.04 64 位中使用 MySQL Workbench,它适用于我的其他笔记本电脑/操作系统(也使用 MySQL Workbench)。

4

9 回答 9

218

如果您尚未将时区表加载到 mysql 中,则会发生这种情况。

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

mysql是保存 MySQL 特定配置数据的内置数据库的名称。

于 2013-01-22T08:37:38.193 回答
28

我花了一些时间试图弄清楚为什么在接受的答案(这在 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

无论如何,我希望这可以为任何寻找修复程序的人省去一些麻烦。

于 2013-08-13T17:01:00.563 回答
17

除了 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

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

于 2014-03-15T09:10:45.933 回答
3

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/
于 2016-11-14T05:44:23.410 回答
3

如果您在 Windows 中并使用 MySQL 5.7,这些是使其工作的步骤。

  1. 右键单击我的电脑/计算机/这台电脑或操作系统中的任何名称,然后选择属性。
  2. 从左侧面板中选择“高级系统设置”。
  3. 选择“环境变量”,输入你的 MySQL bin 目录的完整路径名(一般在 C:\Program Files\MySQL\MySQL Server 5.7\bin)。
  4. 打开 cmd 提示符,使用mysql -u root -p password.
  5. 输入use mysql以选择 MySQL 数据库。
  6. 从https://dev.mysql.com/downloads/timezones.html下载文件“timezone_YYYYc_posix_sql.zip”(代替 YYYY,替换该页面中可用的最大年份,如 2017 年或 2018 年)。
  7. 提取它并在文本编辑器中打开文件。
  8. 复制内容并在 cmd 提示符下执行。

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

于 2017-12-04T17:24:03.430 回答
3

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

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 文件,可能无法解决问题。因此,即使您正在运行 MySQL 5.7,也请继续下载 5.6 的 zip 文件并将这些文件复制到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'); 并检查非空输出。

于 2018-01-12T23:08:28.657 回答
2

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

如果您不这样做,函数 CONVERT_TZ 将无法识别您输入的时区(即您的示例:'UTC'、'Asia/Jakarta'),并且只会返回 NULL。

于 2013-02-27T03:28:51.997 回答
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
于 2016-02-23T14:07:05.200 回答
0

在 Mac OS Catalina 上使用 XAMPP 时,

转到终端中的 /Applications/XAMPP/xamppfiles/bin 文件夹,然后运行以下命令。

./mysql_tzinfo_to_sql /usr/share/zoneinfo | sed -e "s/必须设置本地时区--参见zic手册页/local/" | ./mysql -u 根mysql

这对我有用。

于 2019-11-01T12:34:49.643 回答