planet-green.com

[開発/備忘録] WordPressのテーブルを手動でutf8mb4に一括変換する



現在、WordPressを新規でインストールするかv4.2以前から最新版にアップデートすると、DBの各テーブルの文字コードが自動的にutf8mb4_general_ciに設定されます。
(ただし、DBがMySQLの5.5.3以上かMariaDBの10以上だった場合のみ)

しかし、DBのバージョンが古かったサーバーでWordPressを運用していて既にv4.3以降にアップデートした後、新しいサーバーにデータごと引っ越した場合は、文字コードがutf8_general_ciのままになってしまいます。(当サイトがそうでした。)

そんな時は、まず wp-config.php の DB_CHARSET を utf8mb4 にして、

define('DB_CHARSET', 'utf8mb4');

下記のコードをfunction.phpに貼り付け、 http://(サイトのURL)/?upgradeUtf8mb4=1 をブラウザで呼び出せば utf8mb4_general_ci に一括返還してくれます。
(v4.7.3で動作確認はしましたが、必ず実行前にバックアップしてください)

if( isset($_GET["upgradeUtf8mb4"]) && $_GET["upgradeUtf8mb4"==1 )
{
        require_once ABSPATH."wp-admin/includes/upgrade.php";

        if ( is_multisite() ) {
                $tables = $wpdb->tables( 'blog' );
        } else {
                $tables = $wpdb->tables( 'all' );
                if ( ! wp_should_upgrade_global_tables() ) {
                        $global_tables = $wpdb->tables( 'global' );
                        $tables = array_diff_assoc( $tables, $global_tables );
                }
        }

        foreach ( $tables as $table ) {
                maybe_convert_table_to_utf8mb4( $table );
        }

        echo "done.";
        exit;
}

実行後、テーブルが変換されているのを確認したらこのコードは削除してください。

ちなみに utf8mb4_general_ci は何が違うのかと言うと、絵文字を直接保存できるようになるのです。
(逆に言うと、絵文字を使わないのであればテーブルを変換する必要は無いです)

コメントを残す

メールアドレスが公開されることはありません。

※ URLを含んだコメントは承認後に表示されます。

* 画像に書かれている英数字を入力してください。