MySQL时区更改?

Posted

技术标签:

【中文标题】MySQL时区更改?【英文标题】:MySQL timezone change? 【发布时间】:2011-03-27 23:33:48 【问题描述】:

如何将我当前的 UTC 时区更改为 GMT +1,正确的行是什么,我是否只需在 phpMyAdmin SQL 执行中输入它?

我的主人刚刚给了我这个链接 http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html 然后就关闭了,所以我有点迷路了,谢谢

【问题讨论】:

【参考方案1】:

发出命令:

SET time_zone = 'America/New_York';

(或任何 GMT+1 时区。:http://www.php.net/manual/en/timezones.php)

这是为单个客户端设置 MySQL 时区的命令,假设您的客户端分布在多个时区。

此命令应在每个涉及日期的 SQL 命令之前执行。如果您的查询是通过一个类进行的,那么这很容易实现。

【讨论】:

这将自动更改从所有 TIMESTAMP 字段获取的日期/时间,但不会更改 DATETIME 字段。 它不会改变存储在 DATETIME 或 TIMESTAMP 字段中的值。 它对我不起作用。我收到“错误代码:1298。未知或不正确的时区:'America/New_York'”【参考方案2】:

如果你有 SUPER 权限,你可以在运行时使用这个语句设置全局服务器时区值:

mysql> SET GLOBAL time_zone = timezone;

【讨论】:

如果没有超级管理员权限怎么办? 只是SET time_zone = timezone;【参考方案3】:

虽然 Bryon 的回答很有帮助,但我只想补充一点,他的链接是针对 PHP 时区名称的,这与 MySQL 时区名称不同。

如果您想将单个会话的时区设置为 GMT+1(准确地说是 UTC+1),只需在该命令中使用字符串“+01:00”。即:

SET time_zone = '+01:00';

要查看您的 MySQL 会话使用的时区,只需执行以下命令:

SELECT @@global.time_zone, @@session.time_zone;

这是一个很好的参考资料:MySQL 5.5 Reference on Time Zones

【讨论】:

选择@@global.time_zone, @@session.time_zone,@@global.system_time_zone;【参考方案4】:

如 Umar 所述,最简单的方法是,例如

mysql> SET GLOBAL time_zone = 'America/New_York';

使用命名时区对于具有夏令时调整的时区很重要。但是,对于某些 linux 版本,您可能会收到以下响应:

#1298 - 时区未知或不正确

如果您看到这个,您可能需要运行 tzinfo_to_sql 翻译...这很容易做到,但并不明显。从 linux 命令行输入:

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

提供您的根密码(MySQL 根,而不是 Linux 根),它会将您 zoneinfo 中的任何定义加载到 mysql 中。然后您可以返回并运行您的

mysql> SET GLOBAL time_zone = timezone;

【讨论】:

在 centOS 7.1 上完美运行 Windows 上的用户收到“#1298 - 未知或不正确的时区”怎么办?【参考方案5】:

以下是如何同步每个会话和用户设置的 PHP (>=5.3) 和 MySQL 时区。当你需要设置和同步时区时,把它放在它运行的地方。

date_default_timezone_set($my_timezone);
$n = new \DateTime();
$h = $n->getOffset()/3600;
$i = 60*($h-floor($h));
$offset = sprintf('%+d:%02d', $h, $i);
$this->db->query("SET time_zone='$offset'");

其中 $my_timezone 是 PHP 时区列表中的一个:http://www.php.net/manual/en/timezones.php

PHP 时区必须转换为 MySQL 的小时和分钟偏移量。这就是第 1-4 行的作用。

【讨论】:

你不能用 = date('P'); ?>【参考方案6】:

如果 SET time_zone 或 SET GLOBAL time_zone 不起作用,您可以进行如下更改:

更改时区系统,例如:ubuntu... $ sudo dpkg-reconfigure tzdata

重启服务器也可以重启apache2和mysql (/etc/init.d/mysql重启)

【讨论】:

【参考方案7】:

这很好用

<?php
      $con=mysqli_connect("localhost","my_user","my_password","my_db");
      $con->query("SET GLOBAL time_zone = 'Asia/Calcutta'");
      $con->query("SET time_zone = '+05:30'");
      $con->query("SET @@session.time_zone = '+05:30'");
?>

【讨论】:

以上是关于MySQL时区更改?的主要内容,如果未能解决你的问题,请参考以下文章

mysql更改时区

MySQL时区更改?

更改 MySQL 中的连接时区

MySQL now() 更改时区

mysql更改时区

更新 mysql 时区并更改所有 TIMESTAMPS 列