2012-05-01 34 views
1

假设如下表:MySQL和时区

CREATE TABLE IF NOT EXISTS `test` (
    `stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

当我运行的SQL语句:

SET time_zone = '+00:00'; 
INSERT INTO `test` (`stamp`) VALUES (CURRENT_TIMESTAMP); 

test值是我的机器的本地时间而不是UTC。

根据MySQL的site

为TIMESTAMP列中的值是从当前时区 转换为UTC用于存储,并从UTC到当前时区 检索。

我在做什么错?我想用UTC日期/时间戳存储我的记录,并在用户的本地时区中检索它们。

+0

“我想用UTC日期/时间戳存储我的记录,并在用户的本地时区中检索它们。” ---如果你使用时间戳 - mysql会自动完成。你不应该在乎如何存储日期,你只需要与它在所需时区返回的事实 – zerkms

+0

虽然哪个时区?我会假设MySQL正在使用服务器的时区。我的用户将不会与我的服务器处于同一时区。我想我不需要告诉MySQL在某个时区给我返回值。相反,我只是接受它在我的服务器的时区,并从那里做转换? – StackOverflowNewbie

+0

想知道如何做这样的事情:获取用户时区中下午3点到5点之间的所有记录。 – StackOverflowNewbie

回答

0

根据使用TIMESTAMP数据类型的MySQL 5.5文档,将默认使用服务器的时区,除非您更改客户端的变量。

来源:http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html

每个连接的时区。每个连接的客户端都有自己的时间 区域设置,由session time_zone变量给出。最初, 会话变量的值取自全局time_zone变量 ,但客户端可以使用以下语句更改自己的时区:

mysql> SET time_zone = timezone;

+0

因此,不需要设置时区。只需使用时间戳?它不会将服务器的时间转换为UTC和UTC到服务器的时间吗?我需要它从客户端的时间转换为UTC和UTC到客户端时间(其中客户端时区是我的应用程序中用户指定的值)。 – StackOverflowNewbie

+0

然后,我将服务器time_zone设置为UTC时间。 –