本文目錄一覽:
- 1、mysql 時間 和 系統時間 不一致
- 2、如何修改mysql 時區 為system
- 3、MySQL:一文弄懂時區&time_zone
- 4、MYSQL時區相關的問題
- 5、MySQL怎麼設置時區為格林威治時間。
- 6、mysql修改和查看時區(十五)
mysql 時間 和 系統時間 不一致
你的Linux系統時間是CST(你的情況,應該是美國東部標準時間)。
應該是你時區設置不對。
美國東部時間是GMT-5,北京時間是GMT+8,中間相隔13個小時,正好符合你現在情況。
調整一下你的Linux系統時間,確認一下時區,應該就可以了。。
Good luck。
如何修改mysql 時區 為system
1。在mysql的命令模式下使用
mysql
select
CURTIME();
或
mysql
select
now();
看當前時間是否正確,可以看到mysql當前使用的是那一個時區的時間。
2。在mysql命令行中更改時區
mysql
SET
time_zone
=
‘+8:00’;
#
此為北京時,我們所在東8區
mysql
flush
privileges;
#
立即生效
此時mysql時區已更改正確,與系統時區都使用為
Shanghai時間了。
####
這種方法好像只能在終端上使用,退出終端後時間又會變成原來的,看來只能重啟mysql了。
3。重啟mysql也應沒有問題,此時mysql會主動讀取系統時間。
方法二:
如果mysql數據庫可以重啟,直接重啟,mysql應可以立即主動讀取系統時間,如果不行則更改mysql的配置文件(mysql.cnf)
在my.cnf的
[mysqld]區域中加上
default-time_zone
=
‘+8:00’
#此為北京時。
補充:
如果想臨時解決時間顯示問題,可以用php或其他語言動態修改下mysql的時區。
具體方法:
在mysql_connect()下使用mysql_query(“SET
time_zone
=
‘+8:00′”)。
這樣可以在保證你不重啟的情況下改變時區。但是mysql的某些系統函數還是不能用如:now()。
MySQL:一文弄懂時區&time_zone
你還在被以下問題困擾嗎:
MySQL的安裝規範中應該設置什麼時區?
JAVA應用讀取到的時間和北京時間差了14個小時,為什麼?怎麼解決?
已經運行一段時間的業務,修改MySQL的時區會影響已經存儲的時間類型數據嗎?
遷移數據時會有導致時間類型數據時區錯誤的可能嗎?
…
看完這篇文章,你能解決上面所有的疑惑。首先出場的是和時區相關的啟動參數和系統變量。
如果要在 MySQL 啟動時就指定時區,則應該使用啟動參數: default-time-zone ,示例:
啟動後我們可以看到控制時區的系統變量,其中 time_zone 變量控制時區,在MySQL運行時可以通過 set 命令修改(注意:不可以寫在 my.cnf 中):
啟動參數和系統變量的可用值遵循相同的格式:
system_time_zone 變量只有全局值沒有會話值,不能動態修改,MySQL 啟動時,將嘗試自動確定服務器的時區,並使用它來設置 system_time_zone 系統變量, 此後該值不變。當 time_zone=’system’ 時,就是使用的這個時區,示例中 time_zone 就是 CST,而 CST 在 RedHat 上就是東八區:
概括一下就兩點:
不僅是select now(),包括insert .. values(now())、以及字段的 DEFAULT CURRENT_TIMESTAMP 屬性也受此影響:
timestamp 數據類型會存儲當時session的時區信息,讀取時會根據當前 session 的時區進行轉換;而 datetime 數據類型插入的是什麼值,再讀取就是什麼值,不受時區影響。也可以理解為已經存儲的數據是不會變的,只是 timestamp 類型數據在讀取時會根據時區轉換:
關於時區所有明面上的東西都在上面了,我們前面提到的困擾就是在暗處的經驗。
1. MySQL的安裝規範中應該設置什麼時區?
對於國內的業務了,在 my.cnf 寫入 default-time-zone=’+08:00′ ,其他地區和開發確認取對應時區即可。
為什麼不設置為 system 呢?使用系統時間看起來也是個不錯的選擇,比較省事。不建議的原因有兩點:
2. JAVA應用讀取到的時間和北京時間差了14個小時,為什麼?怎麼解決?
這通常是 JDBC 參數中沒有為連接設置時區屬性(用 serverTimezone 參數指定),並且MySQL中沒有設置全局時區,這樣MySQL默認使用的是系統時區,即 CST。這樣一來應用與MySQL 建立的連接的 session time_zone 為 CST ,前面我們提到 CST 在 RedHat 上是 +08:00 時區,但其實它一共能代表4個時區:
JDBC在解析CST時使用了美國標準時間,這就會導致時區錯誤。要解決也簡單:一是遵守上面剛說到的規範,對MySQL顯式地設置’+08:00’時區;二是JDBC設置正確的 serverTimezone。
3. 已經運行一段時間的業務,修改MySQL的時區會影響已經存儲的時間類型數據嗎?
完全不會,只會影響對 timestamp 數據類型的讀取。這裡不得不提一句,為啥要用 timestamp?用 datetime 不香嗎,範圍更大,存儲空間其實差別很小,趕緊加到開發規範中吧。
4. 遷移數據時會有導致時間類型數據時區錯誤的可能嗎?
這個還真有。
如何避免?mysqldump 也提供了一個參數 –skip-tz-utc ,意思就是導出數據的那個連接不設置 UTC 時區,使用 MySQL 的 global time_zone 系統變量值。
其實 mysqldump 導出 sql 文件時默認也是使用 UTC 時區,並且會在導出的 sql 文件頭部帶有 session time_zone 信息,這樣可以保證導 SQL 文件導入和導出時使用相同的時區,從而保證數據的時區正確(而導出的 csv 文件顯然不可以攜帶此信息)。需要注意的是 –compact 參數會去掉 sql 文件的所有頭信息,所以一定要記得: –compact 參數得和 –skip-tz-utc 一起使用。
MYSQL時區相關的問題
目前你遇到的問題大概是 PHP 獲取的時間和 MySQL中獲取的時間存在時差
比較直接的解決方案是在 PHP 和 MySQL 中遵循同一時區約定
PHP 在5.0 之後應該可以直接在代碼中設定時區
date_default_timezone_set(‘PRC’);
MySQL 也可以通過修改配置文件 my.ini 或者 my.cnf 確保時區正確
default-time-zone=timezone
問題是你的MySQL服務器可能是在某台美國服務器上租借的,沒法修改
所以解決的方法只能是:
修改插件源代碼,將 SQL 語句改為
select forum_id, count(post_id) todayposts
from ‘ .POSTS_TABLE. ‘
where date(from_unixtime(post_time)) = date(DATE_ADD(now(), INTERVAL 14 HOUR))
group by forum_id
其中的 DATE_ADD(now(), INTERVAL 14 HOUR) 是-14 還是 14,這需要你仔細考慮下
MySQL怎麼設置時區為格林威治時間。
MySQL 時區默認是服務器的時區。
查看:
複製代碼代碼如下:
mysql SHOW VARIABLES LIKE ‘%time_zone%’;
+——————+——–+
| Variable_name| Value |
+——————+——–+
| system_time_zone | CST|
| time_zone| SYSTEM |
+——————+——–+
2 rows IN SET (0.00 sec)
可以通過修改my.cnf, 在 [mysqld] 之下加來修改時區。
default-time-zone=timezone
例如:
default-time-zone=’+8:00′
修改後記得重啟msyql。
注意一定要在 [mysqld] 之下加 ,否則會出現錯誤: unknown variable ‘default-time-zone=+8:00′
另外也可以通過命令:
SET time_zone=timezone
例如:比如北京時間(GMT+0800)
SET time_zone=’+8:00′
這個和php的時區設置又有點差別,比如北京時間在php中是:
date_default_timezone_set(‘Etc/GMT-8’);
美國pst時間(GMT-08:00)
SET time_zone = ‘-8:00’;
複製代碼代碼如下:
mysql SET time_zone = ‘+8:00’;
Query OK, 0 rows affected (0.00 sec)
mysql SELECT now();
+———————+
| now() |
+———————+
| 2008-12-29 11:26:36 |
+———————+
1 row IN SET (0.00 sec)
mysql SET time_zone = ‘-8:00’;
Query OK, 0 rows affected (0.00 sec)
mysql SELECT now();
+———————+
| now() |
+———————+
| 2008-12-28 19:27:09 |
+———————+
1 row IN SET (0.00 sec)
mysql修改和查看時區(十五)
1. 查看時區命令
2. GMT、UTC、DST、CST時區代表的意義
2.1 GMT:Greenwich Mean Time
2.2 UTC: Coordinated Universal Time
2.3 DST: Daylight Saving Time
2.4 CST:Central Standard Time
3. 修改時區
3.1 僅修改當前會話的時區,停止會話失效(CET)
3.2 修改全局的時區配置
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/279312.html