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时区更改?的主要内容,如果未能解决你的问题,请参考以下文章