我有一个设置为本地时区的MySQL数据库。虽然数据库使用不同的时区,但时间作为UTC时间插入。我想将MySQL服务器上的时区更改为UTC。我已经找到了关于如何做到这一点的文档,但我不太情愿,因为我不知道这是否也会改变数据库中已经存储的值。
我的问题:会改变MySQL服务器的时区也会改变已经存储的值吗?
发布于 2013-03-11 12:50:35
原则上,它不应该改变。它不应该改变的原因有很多,这取决于你的值的类型:主要是日期时间和时间戳。
日期时间值从不转换,因此它们与时区无关。
时间戳值被转换为“从当前时区转换为UTC存储,并从UTC返回到当前时区检索”(从这里的手册直接引用-我假设您有一个最近版本的MySQL)。(对于其他类型,如DATETIME,则不会发生这种情况。)默认情况下,每个连接的当前时区是服务器的时间。时区可以按每个连接设置.只要时区设置保持不变,就会得到存储的相同值。如果存储时间戳值,然后更改时区并检索值,则检索的值与存储的值不同。这是因为没有使用相同的时区进行双向转换。“(来自http://dev.mysql.com/doc/refman/5.5/en/datetime.html)。
因此,在这两种情况下,实际存储在服务器上的数据不会改变(这是应该的),但是查询将显示的值在前后可能有所不同。
发布于 2013-03-11 13:14:49
这取决于您是使用TIMESTAMP列还是DATETIME列来存储时间戳。
当将TIMESTAMP时间存储到MySQL表中时,会自动将它们从本地时间(精确地:从连接的时区设置)转换为UTC时间。当检索到它们时,它们会从UTC翻译到本地时间。
但是,DATETIME时间戳的存储和检索与应用程序向MySQL提供的时间戳完全相同。因此,如果您将默认时区更改为UTC,然后检索您的TIMESTAMP值,您将在UTC中获得它们。所以他们看起来好像变了一样。但改变的是自动翻译。
更改MySQL默认时区不会更改任何表内容。
在连接到MySQL时,您可以通过发出以下命令来进行试验。
SET time_zone = '+0:00';这将更改连接的时区设置,而不更改任何其他内容。
在重新配置生产服务器时要小心,因为您知道自己在做什么:您说"MySQL数据库.设置为本地时区“。在更改任何内容之前,您需要准确地了解设置的方式。因为这里有一些可以影响事物的设置。
(1)运行MySQL服务器软件的服务器计算机上的时钟设置。
(2)该机器上的时区设置。
(3)运行MySQL服务器中的默认时区设置(也称为全局时区)。
在大多数现代服务器中,时钟设置为正确的UTC时间,时区设置设置为用户期望的任何本地时区。并且,MySQL服务器的默认时区设置设置为相同的本地时区。你需要确认那些事情是正确的。
如果您的服务器一天中的时间自动和正确地从标准切换到夏时制(昨天上午在美国),那么前两个可能是正确的。
如果发出以下MySQL命令:SELECT @@global.time_zone' and get back either your local time zone name orSYSTEMthe third is right. Also issue,请选择NOW()`进行双重检查。如果你一天中有合适的时间,你的系统可能会很好。最后,发出以下两个命令:
SET time_zone = '+0:00';
SELECT NOW(); 如果您从您的系统中得到当前正确的UTC时间,那么一切都是已知的、良好的状态,并且您已经准备好进行时区切换。
通过更改system_time_zone配置文件中的MySQL变量并重新启动MySQL服务器来进行切换。请看这里的指示:
http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html
https://stackoverflow.com/questions/15338480
复制相似问题