Movable Type の記事用のフィールド長の制限値を大きくする。MySQL→Berkeley DB→MySQL で行う。ようやくピカチュウ問題が解決した。
Movable Type で,データベースに MySQL を使っているとき,長い記事を書くと途中で記事が切れてしまうことがある。これは,MySQL データベース上に用意している記事用のフィールドに上限があるためである。上限値は 65535 バイトで,400字詰め原稿用紙80枚分にあたる。通常はこのような長い記事を書くことは有り得ないが,コピペでは発生し得る。Toogle のアスキー文字の出力をそのまま貼り付けたら,途中で切れてしまったのだ。貼り付けた記事を書いた当時は,データベースに Berkeley DB を使っていたので全部表示されていたのだが,その後 MySQL に変換を行った際に表示されなくなってしまった。しかも,気がついたのはしばらくたってからだった(nlog(n): cpufreq には未対応だった)。重要な記事でもないので放置していたが,気持ちが悪いので直すことにした。問題の記事は nlog(n): Toogle - Google のイメージ検索結果を ASCII で表示 である。原因がピカチュウの記事だったので,私は勝手にこれを「ピカチュウ問題」と呼んでいる。
環境は Movable Type 2.661,OS は Vine Linux 3.2,データベースは MySQL 4.0.25 である。
私はデータベースをよく知らないので,ツールを使って「エイヤッ」とやることにした。一旦 Berkeley DB に変換してから,MySQL に戻すことにする。ツールとしては mt-sql2db.cgi: mt-db2sql.cgiの逆変換CGIスクリプト - Ogawa::Memoranda と Movable Type のパッケージに付属している mt-db2sql.cgi を使う。Berkeley DB への変換には mt-db-convert.cgi: MTデータベースの相互変換CGIスクリプト - Ogawa::Memoranda を使わせていただこうかと思ったのだが,こちらは Movable Type 3.1 と 3.2 にしか対応していない。Movable Type 2.661 には mt-sql2db.cgi しか使えない。
方針は次の通り。
mt-sql2db.cgi を使う直前の mt.cfg では,Berkeley DB と MySQL の両方のためのディレクティブを有効にしておく。
schemas/mysql.dump において,記事を定義しているのは entry_text と entry_text_more の2つである。entry_text が「エントリーの内容(body)」,entry_text_more が「追記(extend)」部分に対応する。このサイトでは,追記部分が長くなることがあるので,entry_text_more を最大 65535 バイトの「text」から最大 16777215 バイトの mediumtext に変更する (小粋空間: MySQLでエントリーのフィールドサイズを拡張する)。
MySQL の新しいデータベースは,変換前のデータベースとは別の名前にして作る。mt.cfg は新しいデータベースの名前にする。
Berkeley DB から MySQL への変換は以前にやった通りである (nlog(n): Berkeley DB から MySQL への移行を試す)。
サイトの再構築の前に,Berkeley DB 用のディレクティブをコメントアウトすることを忘れずに。
2005年12月31日追記:
すべてのコメントを表示するページ(nlog(n) - All Comments)の再構築に失敗し,つぎのメッセージが表示されるようになっていましたが,
MySQL サーバの再起動で再構築が成功するようになりました。
Posted by n at 2005-12-27 01:53 | Edit | Comments (2) | Trackback(0)
Master Archive Index
Total Entry Count: 1957
お久しぶりです(と言っても閲覧はほぼ毎日〜2,3日に1度見てますけど)
フィールドの拡張、ついに実行されましたか〜
うちのほうは現時点の最新のMovableType3.2-JA-2に振り回されてたのがどうにか安定して、システム自体を弄るほうよりも日記として扱えるようになってきたところです。
3.2で使えるようになったSQLiteでもこの問題があるのだろうかとちょっと悩み中だったりします……
3.2ではBerkeley DBはほとんど使えない状況です……
Posted by: ち印 at January 04, 2006 06:50こんなことをやらなくても MySQL→MySQL で出来てしまえそうなのですが,データベースの知識がないので,遠回りになってしまいました。
MT 2.661 の情報は少なくなってきてしまいましたので,このまま使い続けるか,3.2 に移行するか,WordPress や Textpattern などの別システムに乗り換えるか悩み中です。
Posted by: n at January 04, 2006 20:59