首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL数据库时区设置不正确-为什么?

问MySQL数据库时区设置不正确-为什么?
EN

Stack Overflow用户
提问于 2013-11-05 07:57:37
回答 1查看 348关注 0票数 2

我有一个通过云服务提供商托管的MySQL数据库。时区与本地时区不同。我试图正确地设置时区..。

下面是我想要获得到MySQL数据库的新连接时使用的PHP代码:

代码语言:javascript
复制
static function get() {
  if (self::$instance!=null) return self::$instance;

  try {
    self::$instance = new Database("mysql:host=".self::$host.";dbname=".self::$dbname, self::$user, self::$pass);
    self::$instance->exec("SET NAMES 'utf8';");  //Use utf8 encoding for special characters
    self::$instance->exec("SET time_zone = '+01:00';"); // set to local timezone   
    return self::$instance;
  }
  catch(PDOException $e) {
      print $e->getMessage();
      return null;
  }
}

每当我将新条目插入到表中时,时间戳仍然设置为云服务提供商的时区。有人能帮我看看我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-05 13:26:33

您确定您正在为该字段使用时间戳类型吗?MySQL的时间戳类型将数据存储为UTC,并在读取数据时将数据转换为当前会话时区。DATETIME类型不这样做,它没有时区信息,因此无法转换。请参阅与此主题这里相关的文档。

例如:

代码语言:javascript
复制
mysql> CREATE TABLE test (some_date DATETIME, created timestamp);
Query OK, 0 rows affected (0.09 sec)

mysql> INSERT INTO test (some_date) VALUES (NOW());
Query OK, 1 row affected (0.05 sec)

mysql> SELECT * FROM test;
+---------------------+---------------------+
| some_date           | created             |
+---------------------+---------------------+
| 2013-11-05 13:14:56 | 2013-11-05 13:14:56 |
+---------------------+---------------------+
1 row in set (0.00 sec)

mysql> SET time_zone = '+4:00';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM test;
+---------------------+---------------------+
| some_date           | created             |
+---------------------+---------------------+
| 2013-11-05 13:14:56 | 2013-11-05 17:14:56 |
+---------------------+---------------------+

在上面的示例中,只有时间戳列受会话time_zone中的更改的影响。如果需要将DATETIME列转换为不同的时区,则在读取数据时应使用TZ函数--指定数据所在的时区和希望将其转换到的时区。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19784155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档