前回の記事「ダイナミックパブリッシング」で SQL エラーが出ると書きましたが、一応解決したので原因と対処法を書いておこうと思います。

注: 多分普通にインストールすればエラーは出ません。

原因

当サイトで利用している XREA+ (それっぽい名前ついたらしい)では、殆どのサーバ(s101, s102, s103 以外)で MySQL 3.23.xx 4.0.xx を利用している。その為、「SET NAMES '文字コード'」は使えません。(MySQL 4.1.xx 以降でしか使えない)

対処法

私が応急処置的にやった対処なんですが、原因を考えると大体 OK だったようです。

それで、具体的な方法の一つは、PHP の該当箇所をコメント化で、他には MySQL のバージョンによって分岐させる等の方法もあると思いますが、今回はコメント化する方法を紹介しておきます。

まず、MovableType の本体があるディレクトリを mt と仮定して、「mt/php/mt.php」 のファイルを探してください。

次に、mt.php をエディタ等で開くと 100 行目辺りに以下のコードが見付かると思います。


100| $lang = $Charset[$this->config['DBDriver']][strtolower($this->config['PublishCharset'])];

上記コードを以下のようにしてコメント化します。


100| //$lang = $Charset[$this->config['DBDriver']][strtolower($this->config['PublishCharset'])];

あとは mt.php を上書きすれば完了です。

サーバの移転などで MySQL のバージョンが変わったら元に戻す為に削除しない方がいいと思われます。

真の原因と対処法

もう一つ原因があった...、と言うよりコッチがそもそもの原因。

インストール時に mt-config.cgi の内容に問題があった。

# SQLSetNames 1

この行はデフォルトでコメント化されていますが、この「#」を外してしまっていたのが原因でした。

つまり、この行をコメントのままにして(デフォルトで)インストールすれば問題なし。

あの注釈コメントは「SET NAMES '文字コード'」命令を使う場合はって意味だったのか...。

っていうか、57行目のSQLSetNamesは、MySQL4.1やPostgreSQL8等のキャラクターセットを明示的に指定するデータベースを利用する場合コメントをはずします。 とマニュアルに書いてあった...。バージョンも関係していたとは思ず、取り敢えず、MySQL だからって理由で「#」を外してしまったわけです。

別にたいしたことではありませんが、同様の症状とその対処法が検索できなかったので書いておきました。って... 簡単なところで地味に間違ったインストールをしていただけなので、検索にかかるはずが無かった。

ちなみに、Movable Type 3.2-ja-2 の場合でした。