Calendar

十二月 2009
« 十一月   一月 »
 123456
78910111213
14151617181920
21222324252627
28293031  

Categories

MySQL 6.0 最好先不要亂升

一個小小原因是因為 5.x -> 6.0 的話做一定會跟你說 .frm 已經壞了叫你修,
然後用 mysql_ugprade 跑下去跟你說修好了其實還是沒修好,
手動進去打 repair table xxx 怎麼打也還是顯示 corrupt 沒辦法修好,
雖然這個應該用 dump/restore 應該是搞得定,
但還有另一個更大的原因讓我不想升。

最主要的原因就是 utf8 的定義在 MySQL 6.0 改了,
它的 size 從 3-byte 變成了 4-byte,
理由是這樣可以塞進更多的字,
舊的 utf8 在 6.0 改叫 utf8mb3,
所以轉資料表的時候可能會跟你說什麼應該是 utf8mb3 可是你編碼寫 utf8,
這當然都還是小問題;
最大的問題其實幾年前裝 mediawiki 也有遇到過,
就是 key 的 max length 是 1000 bytes,
所以用 utf8 當資料庫編碼來安裝的話會超過那個長度,
長久以來不少網頁程式都愛把資料宣告成 varchar(255),
當然這在以前 3-byte 的定義下一共也才 765 bytes 沒超過 1000,
但是現在是 4-byte 變成 1020 bytes,
所以某些網頁程式你裝完連想要初始化都會失敗 (redmine 就是其中一個例子),
當然要修正的話也不是不可能,
畢竟有志者事竟成,
但是總不能裝一套就修一套,
我覺得耐心等到外面多數的網頁程式都認識 MySQL 6.0 的特性並針對它設計專屬的 schema 後,
再考慮去升到 MySQL 6.0 會比較好吧,
不然整天光搞這些東西正事都不用做了。