MySQL 裡儲存時間的方式...

這應該是 MySQL 的 best practice 之一,不知道為什麼 Baron Schwartz 又拿出來講:「A simple rule for sane timestamps in MySQL」。

MySQL 內可以儲存「日期與時間」的資料型態是 DATETIME 與 TIMESTAMP 兩種,不過 DATETIME 沒有時區觀念,而 TIMESTAMP 只能是 UTC (GMT+0)。

相較於隔壁棚 PostgreSQLDate/Time Types 就一種 TIMESTAMP,但支援 with timezone 與 without timezone 直接解決問題。

這使得 MySQL 上在儲存「日期與時間」以及處理的時候一直有種 WTF 的感覺...

就如同 Baron Schwartz 的建議,如果使用 MySQL,目前比較好的方法是用 INT UNSIGNED NOT NULL 儲存,把 timezone 的處理都放到應用程式端來處理,這樣產生的問題會比較少...

真的需要在 INSERT 或是 UPDATE 時更新欄位,可以用 trigger 處理,彈性反而比內建功能大不少。

Percona XtraDB Cluster 5.6 GA

放長假的時候總是可以感覺到世界上其他地方是沒放假的...

Percona 宣佈 Percona XtraDB Cluster 5.6 進入 GA (General Availability):「Percona XtraDB Cluster 5.6 GA release now available」。

Percona XtraDB Cluster 5.6 是基於 MySQL 5.6 以及 Galera Cluster 3 的版本。

其實最主要的效能改善是 Oracle 在 MySQL 5.6 上面下的功夫,比起 5.5 好不少。

Percona 官方有提到,現有的 PXC 5.5 可以在不停機的情況下升級到 5.6 (兩台輪流升級),這是件好事 (表示有問題回報時會被處理),但需要實際測試過才知道要怎麼做。所以就先在虛擬機裡面測試看看,沒問題就來規劃...

不過 PXC 上應該還是不能用 memcache interface 吧?之前有提到有問題,而且也沒看到有解決,所以應該還是不能用?

Ubuntu 上找不到 apt-add-repository 的解法

剛剛在弄 Linode 上的 Ubuntu 時要裝 PPA,發現沒有 apt-add-repository 可以用,找了一下資料發現這不是系統一定會安裝的軟體,所以要自己手動安裝:

apt-get install python-software-properties

裝完後就可以繼續裝 PPA 了。

在烏克蘭的革命...

烏克蘭的革命是目前全世界的焦點 (Google News 的「Ukraine」),但國內幾乎沒看到什麼新聞報導...

其中 DoctrineEnumBundle 的 pull request 也因為事主的回應爆紅:「support SQLite for functional testing purposes」:

I will take a look later. Much much later. Because I'm Ukrainian and we have revolution right now. Sorry

在「Revolution in Kiev, Ukraine」可以看到更多照片與資訊:

投擲武器:

汽油彈:

沒人在跟你客氣的...

資料庫裡 Primary Key 的選擇...

Ingram Chen 寫的「Obvious Choice」這篇舉的例子剛好是在討論資料庫裡 Primary Key 的設計。

這個問題之前在 interview 的時候曾經拿出來問。問到資料庫相關的題目時,有些人在設計 schema 會多放一個 id 欄位,有些人則不會放。

有放 id 欄位的我就會問「為什麼要放」,沒有 id 欄位的我就會問「為什麼不這樣設計」。重點不在於哪個才是正確的,而是在於要能夠說明為何這樣選擇。

不過大多數人都是「看別都這樣做,所以我就這樣做」,可惜...