在一台服务器上,当我运行时:
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2009-05-30 16:54:29 |
+---------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
在另一台服务器上
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2009-05-30 20:01:43 |
+---------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
Tim*_*nen 479
我认为这可能有用:
default-time-zone='+00:00'
Run Code Online (Sandbox Code Playgroud)
要查看它们设置的值:
SELECT @@global.time_zone;
Run Code Online (Sandbox Code Playgroud)
要为其设置值,请使用以下任一项:
SET GLOBAL time_zone = '+8:00';
SET GLOBAL time_zone = 'Europe/Helsinki';
SET @@global.time_zone = '+00:00';
Run Code Online (Sandbox Code Playgroud)
(使用像'Europe/Helsinki'这样的命名时区意味着您必须正确填充时区表.)
请记住,这+02:00是一个偏移量.Europe/Berlin是一个时区(有两个偏移),CEST是一个对应于特定偏移的时钟时间.
SELECT @@session.time_zone;
Run Code Online (Sandbox Code Playgroud)
设置它使用任何一个:
SET time_zone = 'Europe/Helsinki';
SET time_zone = "+00:00";
SET @@session.time_zone = "+00:00";
Run Code Online (Sandbox Code Playgroud)
两者都可能返回SYSTEM,这意味着他们使用my.cnf中设置的时区.
要使时区名称起作用,您必须设置需要填充的时区信息表:http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html.我还提到了如何在这个答案中填充这些表.
TIMESELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);
Run Code Online (Sandbox Code Playgroud)
如果你的时区是+2:00,它将返回02:00:00.
SELECT UNIX_TIMESTAMP();
SELECT UNIX_TIMESTAMP(NOW());
Run Code Online (Sandbox Code Playgroud)
SELECT UNIX_TIMESTAMP(`timestamp`) FROM `table_name`
Run Code Online (Sandbox Code Playgroud)
SELECT UNIX_TIMESTAMP(CONVERT_TZ(`utc_datetime`, '+00:00', @@session.time_zone)) FROM `table_name`
Run Code Online (Sandbox Code Playgroud)
注意:更改时区不会更改存储的日期时间或时间戳,但会显示现有时间戳列的不同日期时间,因为它们在内部存储为UTC时间戳,并在外部显示在当前MySQL时区中.
我在这里做了一个备忘单:MySQL的时区应该设置为UTC吗?
Noe*_*phy 66
对于仍有此问题的人:
value="jdbc:mysql://localhost:3306/dbname?serverTimezone=UTC"
Run Code Online (Sandbox Code Playgroud)
为我工作.只是追加?serverTimezone=UTC到最后.
小智 54
当您可以为MySQL或PHP配置时区服务器时:
记得:
更改时区系统.Ubuntu的示例:
$ sudo dpkg-reconfigure tzdata
Run Code Online (Sandbox Code Playgroud)重新启动服务器,或者您可以重新启动Apache 2和MySQL:
/etc/init.d/mysql restart
Run Code Online (Sandbox Code Playgroud)Jam*_*ore 53
要为当前会话设置它,请执行以下操作:
SET time_zone = timezonename;
Run Code Online (Sandbox Code Playgroud)
Ric*_*han 43
只需在MySQL服务器上运行:
SET GLOBAL time_zone = '+8:00';
Run Code Online (Sandbox Code Playgroud)
其中+8:00将是您的时区.
小智 16
这对我来说是印度的一个地方:
SET GLOBAL time_zone = "Asia/Calcutta";
SET time_zone = "+05:30";
SET @@session.time_zone = "+05:30";
Run Code Online (Sandbox Code Playgroud)
ham*_*ber 16
这是一个 10 年前的问题,但无论如何这对我有用。我在 Hibernate 5 和 SpringBoot 4 中使用 MySQL 8.0。
我已经尝试了上述接受的答案,但对我不起作用,对我有用的是:
db.url=jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=Europe/Warsaw
Run Code Online (Sandbox Code Playgroud)
如果这对您有帮助,请不要忘记给它点赞:D
Ale*_*lli 10
您可以在启动时指定服务器的默认时区,请参阅http://dev.mysql.com/doc/refman/5.1/en/server-options.html,特别是该--default-time-zone=timezone选项.您可以使用检查全局和会话时区
SELECT @@global.time_zone, @@session.time_zone;
Run Code Online (Sandbox Code Playgroud)
用SET语句设置其中一个或两个,&c; 有关更多详细信息,请参阅http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html.
请记住,"国家/地区"有时不起作用......这个问题不是操作系统,MySQL版本和硬件依赖 - 自从FreeBSD 4和Slackware Linux在2003年到今天我都遇到了它.MySQL从版本3到最新的源干线.它是ODD,但它确实发生了.例如:
root@Ubuntu# ls -la /usr/share/zoneinfo/US
total 8
drwxr-xr-x 2 root root 4096 Apr 10 2013 .
drwxr-xr-x 22 root root 4096 Apr 10 2013 ..
lrwxrwxrwx 1 root root 18 Jul 8 22:33 Alaska -> ../SystemV/YST9YDT
lrwxrwxrwx 1 root root 21 Jul 8 22:33 Aleutian -> ../posix/America/Adak
lrwxrwxrwx 1 root root 15 Jul 8 22:33 Arizona -> ../SystemV/MST7
lrwxrwxrwx 1 root root 18 Jul 8 22:33 Central -> ../SystemV/CST6CDT
lrwxrwxrwx 1 root root 18 Jul 8 22:33 Eastern -> ../SystemV/EST5EDT
lrwxrwxrwx 1 root root 37 Jul 8 22:33 East-Indiana -> ../posix/America/Indiana/Indianapolis
lrwxrwxrwx 1 root root 19 Jul 8 22:33 Hawaii -> ../Pacific/Honolulu
lrwxrwxrwx 1 root root 24 Jul 8 22:33 Indiana-Starke -> ../posix/America/Knox_IN
lrwxrwxrwx 1 root root 24 Jul 8 22:33 Michigan -> ../posix/America/Detroit
lrwxrwxrwx 1 root root 18 Jul 8 22:33 Mountain -> ../SystemV/MST7MDT
lrwxrwxrwx 1 root root 18 Jul 8 22:33 Pacific -> ../SystemV/PST8PDT
lrwxrwxrwx 1 root root 18 Jul 8 22:33 Pacific-New -> ../SystemV/PST8PDT
lrwxrwxrwx 1 root root 20 Jul 8 22:33 Samoa -> ../Pacific/Pago_Pago
root@Ubuntu#
Run Code Online (Sandbox Code Playgroud)
这样的声明应该起作用:
SET time_zone='US/Eastern';
Run Code Online (Sandbox Code Playgroud)
但是你有这个问题:
错误代码:1298.未知或不正确的时区:'EUS/Eastern'
查看区域信息目录中的子文件夹,查看符号链接的ACTUAL文件名,在本例中为EST5EDT.然后尝试这个语句:
SET time_zone='EST5EDT';
Run Code Online (Sandbox Code Playgroud)
它实际上正如它应该的那样工作!:)记住这个伎俩; 我还没有看到它在MySQL手册和官方文档中记录.但阅读相应的文档是必须做的事情:MySQL 5.5时区官方文档 - 并且不要忘记将时区数据加载到服务器中(就像root用户一样!):
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
Run Code Online (Sandbox Code Playgroud)
特技第一 - 它必须完全在MySQL root用户下完成.它甚至可以从完全访问MySQL数据库的用户那里失败或产生非工作结果 - 我自己看到了这个故障.
如果您正在使用PDO:
$offset="+10:00";
$db->exec("SET time_zone='".$offset."';");
Run Code Online (Sandbox Code Playgroud)
如果您使用的是MySQLi:
$db->MySQLi->query("SET time_zone='".$offset."';");
Run Code Online (Sandbox Code Playgroud)
有关格式化偏移量的更多信息,请访问:https: //www.sitepoint.com/synchronize-php-mysql-timezone-configuration/
sudo nano /etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)
滚动并将它们添加到底部。更改为相关时区
[mysqld]
default-time-zone = "+00:00"
Run Code Online (Sandbox Code Playgroud)
重新启动服务器
sudo service mysql restart
Run Code Online (Sandbox Code Playgroud)
古老的问题,还有一个建议:
如果您最近更改了操作系统的时区,例如通过:
unlink /etc/localtime
ln -s /etc/usr/share/zoneinfo/US/Eastern /etc/localtime
Run Code Online (Sandbox Code Playgroud)
... MySQL(或 MariaDB)在您重新启动 db 服务之前不会注意到:
service mysqld restart
Run Code Online (Sandbox Code Playgroud)
(或者)
service mariadb restart
Run Code Online (Sandbox Code Playgroud)
首先要弄清楚你可以查询的 time_zone 是什么
SHOW VARIABLES LIKE '%time_zone%';
Run Code Online (Sandbox Code Playgroud)
您的输出应该类似于以下内容
**Variable_name** **Value**
system_time_zone CDT
time_zone SYSTEM
Run Code Online (Sandbox Code Playgroud)
然后,如果您想确认您所在的时区(例如 CDT)而不是 EST(东部时间),您可以检查它认为您的机器所在的时间:
SELECT NOW();
Run Code Online (Sandbox Code Playgroud)
如果这不是您想要的时间,您需要改变它......您所需要做的就是SET time_zone = timezone_name。确保它是Continent/City格式正确的。
如果您由于拥有托管服务而位于共享服务器上,请参阅有关更改 php.ini 文件或 .htaccess 文件的这些答案。
小智 5
如果您使用命名时区会导致错误:
mysql> SET GLOBAL time_zone = "Asia/Bangkok";
ERROR 1298 (HY000): Unknown or incorrect time zone: 'Asia/Bangkok'
Run Code Online (Sandbox Code Playgroud)
你可以试试:
mysql_tzinfo_to_sql tz_file tz_name | mysql -u root -p mysql
Run Code Online (Sandbox Code Playgroud)
进而:
SET GLOBAL time_zone = "Asia/Bangkok";
SET time_zone = "+07:00";
SET @@session.time_zone = "+07:00";
Run Code Online (Sandbox Code Playgroud)
检查现在几点了:
SELECT NOW();
Run Code Online (Sandbox Code Playgroud)
参考: https: //dev.mysql.com/doc/refman/5.7/en/time-zone-support.html#time-zone-installation
| 归档时间: |
|
| 查看次数: |
623651 次 |
| 最近记录: |