ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
なぜ絵文字が「??」になるのか
WordPress のデフォルト MySQL 文字セットは古いインストールでは utf8 でした。MySQL の utf8 は最大 3 バイトまでしか格納できず、絵文字 (例: U+1F600) はUTF-8 で 4 バイト必要なため、保存時に「?」「??」に置換されてしまいます。
4 バイト文字を扱うには MySQL の utf8mb4 (mb4 = multi-byte 4 bytes) に変換する必要があります。WordPress 4.2 以降は新規インストール時に utf8mb4 が既定ですが、古い時期に作られたサイトは utf8 のまま残っているケースが多いです。
現状確認
-- DB の charset
SELECT default_character_set_name
FROM information_schema.SCHEMATA
WHERE schema_name = 'wordpress';
-- utf8mb4 / utf8 のいずれか
-- テーブル別
SELECT table_name, table_collation
FROM information_schema.TABLES
WHERE table_schema = 'wordpress';
-- カラム別
SELECT table_name, column_name, character_set_name, collation_name
FROM information_schema.COLUMNS
WHERE table_schema = 'wordpress'
AND data_type IN ('varchar','text','mediumtext','longtext');
対処手順 (全体像)
- DB バックアップ (mysqldump)
wp-config.phpのDB_CHARSETをutf8mb4に- DB と全テーブル・全カラムを utf8mb4 に変換
- 動作確認 (絵文字を含むコメント投稿)
STEP 1: バックアップ
# 必ず先にダンプ
mysqldump -u wpuser -p \
--default-character-set=utf8mb4 \
--single-transaction \
wordpress > wp-backup-$(date +%F).sql
STEP 2: wp-config.php の編集
// wp-config.php
define('DB_CHARSET', 'utf8mb4');
define('DB_COLLATE', ''); // 既定 (utf8mb4_unicode_ci) で OK
STEP 3: DB の変換
方法 A: SQL 直接
-- DB 全体
ALTER DATABASE wordpress
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 全テーブルとカラムを変換
ALTER TABLE wp_comments CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_commentmeta CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_posts CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_postmeta CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_usermeta CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_options CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_terms CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_term_taxonomy CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_termmeta CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_links CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
方法 B: WP-CLI (推奨)
# WP-CLI で一括 (テーブル列挙が不要)
wp db query "ALTER DATABASE \`$(wp config get DB_NAME)\` \
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 全テーブル一括変換
for table in $(wp db tables --format=csv); do
wp db query "ALTER TABLE \`$table\` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
done
# 確認
wp db query "SHOW TABLE STATUS" | awk '{print $1, $15}'
方法 C: 一括変換スクリプト生成
-- ALTER TABLE 文を SQL で生成
SELECT CONCAT(
'ALTER TABLE `', table_schema, '`.`', table_name,
'` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'
) AS stmt
FROM information_schema.tables
WHERE table_schema = 'wordpress'
AND table_type = 'BASE TABLE';
InnoDB 設定 (古い MySQL 5.6 のみ要対応)
MySQL 5.6 / MariaDB 10.0 系では utf8mb4 のインデックス (varchar(255)) で「Row size too large」エラーが起きやすく、以下の設定が必要でした:
# /etc/mysql/my.cnf
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
innodb_file_per_table = ON
innodb_file_format = Barracuda
innodb_large_prefix = ON
innodb_default_row_format = DYNAMIC-- 既存テーブルを DYNAMIC へ
ALTER TABLE wp_posts ROW_FORMAT=DYNAMIC;
MySQL 5.7+ / 8.0 / MariaDB 10.2+ はこれらが既定なので、新しい環境では考慮不要です。
動作確認
# 投稿 → 絵文字付きコメントを投稿
# DB を直接見て 4 バイト文字が入っているか
mysql -e "SELECT comment_content FROM wp_comments ORDER BY comment_ID DESC LIMIT 1;" \
wordpress --default-character-set=utf8mb4
関連: 絵文字 JS の自動読込を止める
WordPress は古い (絵文字未対応の) ブラウザ用に wp-emoji-release.min.js を全ページ自動で読み込みます。これは絵文字の表示用であり、絵文字の保存可否とは別物です。ページ速度のために止めたいだけなら:
// functions.php
add_action('init', function() {
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('admin_print_scripts', 'print_emoji_detection_script');
remove_action('wp_print_styles', 'print_emoji_styles');
remove_action('admin_print_styles', 'print_emoji_styles');
remove_filter('the_content_feed', 'wp_staticize_emoji');
remove_filter('comment_text_rss', 'wp_staticize_emoji');
remove_filter('wp_mail', 'wp_staticize_emoji_for_email');
});
あるいは「Disable Emojis」プラグインで同等効果。
コメントフォーム側の確認
コメント投稿フォームの <textarea> は通常 type 指定不要ですが、ページ全体のメタが charset=utf-8 になっているか念のため確認:
<head>
<meta charset="utf-8">
...
</head>
FAQ
Q: 変換中に「Index column size too large」
A: MySQL 5.6 系。innodb_large_prefix=ON + innodb_file_format=Barracuda + ROW_FORMAT=DYNAMIC を設定。
Q: 一部テーブルだけ utf8 のまま
A: WP-CLI の wp db search-replace や information_schema で対象を再洗い出し → 個別 ALTER TABLE。
Q: 既存のコメントの「??」は復元できる?
A: 不可。元の絵文字情報は破棄されています。変換後の新規投稿から保存可能になります。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?