Mysql

如何將 MySQL(Linux mysql 命令)會話時區永久設置為 UTC?

  • June 28, 2018

我在 Linux(CentOS,最新版本)上使用 MySQL。我希望 MySQL 系統變數time_zone反映 UTC。

當我啟動 MySQL 會話(使用命令行工具mysql)並檢查時區設置時,我看到:

mysql> select @session.time_zone ;
+--------------------+
| @session.time_zone |
+--------------------+
| NULL               |
+--------------------+
1 row in set (0.00 sec)

我知道(請參閱MySQL Set UTC time as default timestamp)我可以將伺服器配置為將 UTC 作為其預設時區。我想要的是設置一個客戶端會話以將 UTC 作為預設值。

上面的頁面說我可以在我的 SQL 語法中設置一個 MySQL 系統變數,如下所示:

mysql> set @session.time_zone="+0:00";

這導致會話時區成為本地 ( SYSTEM) 時區:

mysql> show variables like '%zone%' ;
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | PDT    |
| time_zone        | SYSTEM |
+------------------+--------+
2 rows in set (0.00 sec)

我想做的是將時區設置為使用者的一種偏好,例如.my.cnf.

問題是,MySQL ‘mysql’ 命令選項沒有列出 ’time zone’ 選項.my.cnf,並且(當然我無論如何都必須嘗試)把

time_zone="+0:00"

在我的$HOME/.my.cnf文件中導致消息

mysql: unknown variable 'time_zone=+0.00'

我嘗試設置TZ環境變數,這沒有影響。

正如上面的 StackExchange 參考所說,我發現的唯一有效方法是發出 SQL 命令:

mysql> select @session.time_zone ;
+--------------------+
| @session.time_zone |
+--------------------+
| NULL               |
+--------------------+
1 row in set (0.00 sec)

mysql> set @session.time_zone="+0:00";
Query OK, 0 rows affected (0.00 sec)

mysql> select @session.time_zone ;
+--------------------+
| @session.time_zone |
+--------------------+
| +0:00              |
+--------------------+
1 row in set (0.00 sec)

所以…

那麼我的問題是,是否有其他機制來設置 MySQL 會話變數?或者其他方式來設置會話時區?

default_time_zone=UTC中使用my.cnf

參考:https ://stackoverflow.com/questions/4562456/mysql-setting-time-zone-in-my-cnf-options-file

~/.my.cnf

[mysql]
init_command="SET time_zone='+0:00'"

引用自:https://dba.stackexchange.com/questions/151182