
背景
以前の WordPress は絵文字に対応しておらず、表示はおろか保存すらできない状態であった。
https://b.0218.jp/20140423123227.html
これはデータの格納テーブルの文字コードの問題であり、プログラムの問題ではない。
今回の 4.2 でテーブルの文字コードも変更され(データベースのテーブルもアップグレード)、追加で絵文字を画像に置き換えるスクリプトが追加された。
WordPress 4.2 は中国語・日本語・韓国語の文字、音楽・数学用の記号、象形文字を含む多くの新しい文字に対応しています。
とあるので、単純に「絵文字に対応した」というわけではない。
新しいテーブルの構造
文字コードがutf8mb4
になっているのが分かる。(これまではutf8
)
CREATE TABLE `wp_posts` (
`ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`post_author` bigint(20) unsigned NOT NULL DEFAULT '0',
`post_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`post_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`post_content` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
`post_title` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL,
`post_excerpt` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL,
`post_status` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'publish',
`comment_status` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'open',
`ping_status` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'open',
`post_password` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`post_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`to_ping` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL,
`pinged` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL,
`post_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`post_modified_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`post_content_filtered` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
`post_parent` bigint(20) unsigned NOT NULL DEFAULT '0',
`guid` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`menu_order` int(11) NOT NULL DEFAULT '0',
`post_type` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'post',
`post_mime_type` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`comment_count` bigint(20) NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`),
KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`),
KEY `post_parent` (`post_parent`),
KEY `post_author` (`post_author`),
KEY `post_name` (`post_name`(191))
) ENGINE=MyISAM AUTO_INCREMENT=1960 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
自前で ALTER
しなくてすむようになった(アップデートの裏でやっているのだろうけれど)。
alter database wp character set utf8mb4;
alter table wp_posts convert to character set utf8mb4;