カスタムフィールドの型を変える(その2)

昨日の続きで、データベースを直接に操作して、カスタムフィールドの型を変える方法を紹介します。
今日は、変更前と後とで、データの保存先の列が変わらない場合を取り上げます。

1.注意事項

この記事で取り上げる方法では、データベースを直接に操作します。
操作を間違うと、Movable Typeのデータ(特にカスタムフィールドのデータ)が壊れることもあり得ます。

データベースを操作する前に、データを必ずバックアップしておいてください。
また、バックアップしたデータを正しく復元できることも確認しておいてください。
操作ミスでデータが壊れたとしても、当方は責任を負いません。

2.SQLを実行する

昨日の記事で述べたように、カスタムフィールドのデータは、○○○_metaテーブルに保存されます。
また、カスタムフィールドの型に応じて、保存先の列が異なります。

型を変更する前後で保存先の列が同じ場合は、mt_fieldテーブルを書き換えるだけで済みます。
例えば、テキストのカスタムフィールドをドロップダウンに変更する場合、どちらの型も保存先の列はvchar_idxです(昨日の記事を参照)。
したがって、mt_fieldテーブルを書き換えるだけで済みます。

mt_fieldテーブルを書き換えるには、phpMyAdminにログインし、Movable Typeのデータベースを操作する状態にして、グローバルナビゲーションの「SQL」をクリックします。
そして、以下のSQLを実行します。

UPDATE mt_field SET field_type = '型名'
WHERE field_blog_id = ブログ/ウェブサイトのID
AND field_basename = 'ベースネーム'

例えば、IDが1番のブログに、ベースネームが「pref」というテキスト型のカスタムフィールドがあるとします。
そして、このカスタムフィールドをドロップダウン型に変えたいとします。
この場合、以下のSQLを実行します。

UPDATE mt_field SET field_type = 'select'
WHERE field_blog_id = 1
AND field_basename = 'pref'

なお、システムのカスタムフィールドを変更する場合は、ブログ/ウェブサイトのIDのところに「0」を入れます。
例えば、上の例で、カスタムフィールドがシステムのものである場合は、以下のSQLを実行します。

UPDATE mt_field SET field_type = 'select'
WHERE field_blog_id = 0
AND field_basename = 'pref'