星期三, 1月 05, 2011

MySQL 時區設定

MySQL伺服器有幾個時區設置:
  • 系統時區:mysql 啟動時便試圖確定主機的時區,用它來設置system_time_zone系統變數。
    可以用下面的語句重設:
          mysql> set  system_time_zone = CST;

  • mysql 當前的時區:全域系統變數time_zone資料表示伺服器當前使用的時區。初使值為'SYSTEM',是對到 system_time_zone說明伺服器時區與系統時區相同可以用--default-time-zone=timez選項顯式指定初使值。如果您有SUPER 權限,可以用下面的語句在運行時設置全域變數值:
 mysql> SET GLOBAL time_zone = timezone; 例: SET GLOBAL time_zone = '+8:00';


  • 每個session的時區:每個客戶端連接有自己的時區設置,用session.time_zone變數。其初使值與全域變數time_zone相同,但可以用下面的語句重設:
mysql> SET time_zone = timezone; 例:
          mysql> set  time_zone = '+8:00';
         若沒生效可下 mysql> flush privileges;   # 立即生效
  • 可以用下面的方法查詢當前的系統時區及全域變數值和每個session的時區:

    mysql> SELECT @@system_time_zone, @@global.time_zone, @@session.time_zone;

    mysql> show variables like '%time_zone%'
         查看目前時間 
         mysql> select CURTIME(); 或 mysql> select now();

timezone值為字串,資料表示UTC的偏移量,例如'+10:00''-6:00'。如果已經建立並裝
mysql資料庫中的時區相關資料表,您還可以使用命名的時區,
'Europe/Helsinki''US/Eastern''MET'。值'SYSTEM'說明該時區應與系統
時區相同。時區名對大小寫不敏感。

若系統時區以修改為你要的時區,如果伺服器可重啟則可經有重新動啟mysql來得到正確的時區

可經由修改/etc/my.cnf
[mysqld] 之下加
default-time-zone=timezone 
來修改時區。如:
default-time-zone = '+8:00'
改了之後需重啟msyql才會生效
注意一定要在 [mysqld] 之下加 ,否則會出現 unknown variable 'default-time-zone=+8:00'





參考資料
http://twpug.net/docs/mysql-5.1/database-administration.html     MySQL伺服器時區支援
http://twpug.net/docs/mysql323/manual_Problems.html

沒有留言: