【Xserver】新サーバー簡単移行で絵文字などの特殊文字が文字化けする

Xserver では、新しい最新のサーバに乗り換えることができる新サーバ簡単移行というものが用意されています。こちらの機能で新サーバに移行するとスペックが高いサーバが使えるようになりサイトの表示速度やその他の処理速度などが改善されます。

2024年6月5日に sv16001~ のサーバが導入され、新サーバ簡単移行が提供されました。
私もいち早く新サーバに移行することにしており、リリース当日の6月5日には移行が完了しました。

しかし、移行時に絵文字などの特殊文字が文字化けしている可能性に気が付き、別のサーバの移行時に検証を行い確証が得られたため、サポートに連絡しました。今回はその状況等のまとめです。
(なお、今回もですが、サポートの方の対応は素晴らしく改めて感謝致します)

基本的には、Xserver が提供する WordPress 簡単インストールを使用していればこの問題は発生しません。
自分でデータベースを設定して使用している場合や、プラグイン等が文字コードを指定してテーブルを作成している場合に限ります。

事象; 絵文字や特殊文字が文字化けする

事象としては、データベース内にエンコードされずに保存されている文字 (WordPress だと投稿本文など) の内、絵文字や黒板太字のような特殊文字が文字化けして ? (クエスチョンマーク) に置換されてしまいます。

移行前
移行後

私が気が付いたのは、旧 Twitter の新名称である 𝕏 が文字化けしているのを発見した時でした。1ページだけなら編集時に間違えたのかなとスルーしていたと思いますが、複数ページや箇所 (データベース上で別の場所に保存されていることが分かっている複数の部分) で同一の文字化けが発生していたからです。

別のサーバでも新サーバへの移行を行う予定があったので、そのタイミングで上記のようなテスト用のテーブルを作成して、検証を行いました。その結果が上記の通りで予想通り、絵文字などの特殊文字で文字化けが発生しました。

発生条件; データベースの文字コードが utf8mb4 で utf8mb3 範囲外の文字列を使用している場合

本事象の発生条件は、データベースやテーブル、カラムの文字コードが utf8mb4 に設定されている場合に限られ、かつ、そのテーブルに utf8mb3 の範囲外になる特殊な文字が保存されていることです。

ここで、utf8mb3 という文字コードは、Xserver が2024年現在使用している MySQL や MariaDB のバージョンに於いては utf8 のエイリアス (別名) です。
※ MySQL 8.0 では、すでに非推奨で utfmb4 を明示すべきと明記されています。将来的に utf8mb4 のエイリアスになる可能性があります。

utf8mb3 は、3バイトからなるマルチバイト文字までを正しく格納できる文字コードで、日本語などを含めて殆どの文字はここに収まります。一方で、絵文字はこの範囲外のものがあり保存することはできません。

Xserver の「WordPress 簡単インストール」を使用して作成されたデータベースは、WordPress の標準的な動作と異なり文字コードが utf8 (=utf8mb3) で作成されます。この理由は Xserver の内部的な仕様の問題のようです。(後述)

※通常は、wp-config.php の DB_CHARSET 定数をデフォルトのまま ‘utf8’ にして wp-admin/install.php でインストールすると wpdb::determine_charset() メソッドによって文字コードを ‘utf8mb4’ としてテーブルを作成します。2015年ごろから utf8mb4 にする動きがあったようです。

この状態 (utf8mb3) であれば新サーバ簡単移行で文字化けが発生する4バイト使用する文字が保存できないので問題は発生しません。ですので、Xserver が提供するツールを使って WordPress をインストールしているのであれば問題ないです。
(プラグインが utf8mb4 でテーブルを作成していることがあるので、その部分に関しては今回の事象が発生する可能性があります)

対策; 新サーバ簡単移行でデータコピー後にデータベースを手動で移行

今回の事象の対策としては、手動でデータベースのみを移行することが間違いないかと思います。

ファイルなどのコピーとデータベースのコピーを分けて実行することはできないので、一度全てのファイルとデータベースをコピーしてから Xserver のツールで移行されたデータベースを全て削除して、手動でデータベースを再構築する必要があります。

データベースは、古い方のサーバから phpmyadmin でエクスポートして、新しいサーバの phpmyadmin でインポートすれば簡単に再構築が可能です。

補足; Xserver では utf8mb3 のみが対応文字コードで、utf8mb4 はカスタム仕様

本件について、バグの可能性も考えられたために Xserver のサポートに確認を行いました。

その結果、Xserver としては、データベースの対応文字コード「EUC-JP/UTF-8/Shift-JIS/Binary から選択可」の “UTF-8” は、utf8mb3 のことを指すとご回答いただきました。utf8mb4 は対応文字コードの UTF-8 には含めていないという認識ということでした。
※ Xserver のツールを使用する場合における対応文字コード。ユーザ自身が作成したデータベース等についてはこの限りではないようです。

このような背景があり、おそらく内部的な処理で utf8mb3 を使う中間テーブルなどが存在すると予想されます。これにより Xserver が提供する移行ツールやインストールツールは utf8mb3 を文字コードとして使用しているようです。

まとめ

今回は、Xserver の新サーバ簡単移行に関する少し困った事象の解説でした。

ご自分でやるのが不安な場合、ぜひお問い合わせください。ご自分でやるのが不安な場合、ぜひお問い合わせください。
移行と同時に PHP のバージョン更新 (PHP 7.4 や 8.0 もサポートが切れています) や WordPress 環境の見直しなども対応できます。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメントは日本語で入力してください。(スパム対策)

CAPTCHA