概要
業務でutf8mb4対応を他のシステムでやって存在を知った。
自分ブログにもutf8mb4に対応して絵文字を入力できるようにしてみた。
環境
CentOS 6.9
mysql 5.1
wordpress 4.9.8
原因
mysqlはutf8mb4じゃないと絵文字を入れることができない。
ちなみに吉田さんの「𠮷」バージョンとかもutf8mb4じゃないと化けてしまう。
使っているmysql5.1でutf8mb4を使えなかった。
mysql5.5以上で出来る様子、使えないならバージョンアップしちゃえばいいじゃない
カラムの型を変えることで対応することもできるみたいです。
MySQL5.1 で 4byte な utf8 文字を扱う方法
対応
DBダンプを取る
消えてはまずいものをバックアップする
mysqldump -u root -p -h localhost wordpress_db > wordpress_db_dump.sql
mysqlのバージョンを上げる
こちらを参考に下記コマンドを実行した。
service mysqld stop
yum remove mysql*
yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yum install mysql mysql-devel mysql-server mysql-utilities
バージョン確認
mysql --version
mysql Ver 14.14 Distrib 5.6.41, for Linux (x86_64) using EditLine wrapper
OK!!
とりあえずここまでで、絵文字入力できました。
特にutf8mb4設定してないのに入力できたのは謎
(その他)utf8mb4について
とりあえず、絵文字入力ができたが全体でutf8mb4に合わせたほうがいいかと思ったので下記を実施した。
mysqlとクライアントの文字コードを設定する
[mysqld]
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
下記で確認する。
show variables like "chara%";
データベースの文字コードを設定する
alter database wordpress_db character set utf8mb4;
下記で確認する。
show create database wordpress_db;
テーブルの文字コードを設定する
下記SQLを流す。今回エラーがでなかったが変換時に行フォーマット系でエラーが出る場合がある。
alter table `wp_commentmeta` convert to character set utf8mb4;
alter table `wp_comments` convert to character set utf8mb4;
alter table `wp_links` convert to character set utf8mb4;
alter table `wp_options` convert to character set utf8mb4;
alter table `wp_postmeta` convert to character set utf8mb4;
alter table `wp_posts` convert to character set utf8mb4;
alter table `wp_term_relationships` convert to character set utf8mb4;
alter table `wp_term_taxonomy` convert to character set utf8mb4;
alter table `wp_termmeta` convert to character set utf8mb4;
alter table `wp_terms` convert to character set utf8mb4;
alter table `wp_usermeta` convert to character set utf8mb4;
alter table `wp_users` convert to character set utf8mb4;
下記で確認する。create文が表示されて、charsetがutf8mb4になっているのがわかる。
show create table wp_posts;
番外編
カラムだけ適応させるには?
業務でカラムだけutf8mb4対応した。
alter table table_name modify 'column_name' varchar(255) character set utf8mb4;
みたいな感じでカラムのみ変更できる。