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

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

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

【问题讨论】:

    标签: mysql timezone


    【解决方案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'");
      ?>
      

      【讨论】:

        猜你喜欢
        • 2011-03-24
        • 2012-05-30
        • 2015-03-14
        • 2018-10-14
        • 1970-01-01
        • 1970-01-01
        • 2011-07-27
        • 1970-01-01
        • 2011-08-26
        相关资源
        最近更新 更多