主服務器上部署著多個針對不同時區國家的電商網站,而且這些網站存盤下單時候的欄位,MySQL基本上都是使用的 datetime 型別。從服務器N臺,主要用于備用 和 Read。然后因為MySQL存盤時間型別是沒有時區,跟隨服務器系統的時區,就導致了如果主從服務器時區不一樣,那么同步過去的資料就會立即錯誤,風險極大。并且有的程式之中已經指定 東八區 或 西五區(紐約時間),然后又在程式中生成 datetime格式時間再插入資料庫……
關于資料庫的時區,其實是服務器上系統的時區,該如何設計才更合理科學?
方案一、所有服務器的系統全部使用UTC時區,mysql資料庫表欄位可以使用datetime來存盤時間,應用程式如PHP JAVA在寫入的生成時間的時區也都是UTC時區下生成的,等于全部統一。這樣就必須保證所有服務器的時區都統一在UTC,查詢顯示給用戶的時候全部轉換成當地用戶 localtime。但是存在一個問題,比如在其當地時間倫敦是 上午八點發帖,但是如果真的進行時間轉換,到了在位于北京的用戶看的其發布時間就是下午5點發布的。這樣顯示其實也不合理 ?
方案二、
服務器的時區任意設定,mysql中存放時間的欄位全部使用int存時間戳。寫入的時候全部寫入unix時間戳。但很多已經成型的程式都并不是這樣,如果這樣全部修改一便,工程量巨大,并且舊資料需要轉換。其次同樣存在上面那個問題。
如何解決資料時區問題?
uj5u.com熱心網友回復:
在WEB程式中的MYSQL連接字串加上timezone的設定。uj5u.com熱心網友回復:
如果是全新的程式,應該統一用UTC還是 當地時區比較好呢
uj5u.com熱心網友回復:
在倫敦8點發的帖子為啥在北京看是17點發的?有截圖嗎?uj5u.com熱心網友回復:
因為存盤的是時間戳,倫敦8點的時間戳,在北京時間就是17點。
uj5u.com熱心網友回復:
我覺得 時間戳和時區,要一塊存盤。展示的時候,通過時間戳和發帖人所在時區在恢復時間。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/10246.html
標籤:MySQL
上一篇:自定義編號的排序問題
