少し前の話なのですが、KAI-YOU.netで使用しているサーバーを変更してサーバー移転をしました!!
と、同時についでにですが、これまで対応できていなかった「絵文字」に対応しました!
コロッケのまんま、茸のまんま……本当にまんまなのか判定してみた!より
絵文字は1990年代に携帯電話の普及に合わせて日本で誕生し、現在では国際標準規格として世界中のパソコンや携帯電話で使用されています。
「嬉し泣きを表す絵文字(Face with Tears of Joy)が、オックスフォード英語辞典の「2015年を代表する英語」として選出されるなど、SNSが発達した現代を象徴するコミュニケーションツールとして親しまれている。」
絵文字を紐解く洋書『The Story of Emoji』 生みの親インタビューも より
……というように、今後の「テキストだけではない文章表現」「今っぽさ!」などの部分もありますが、実際には、記事の編集中起こりうる事故に対応するという大きな理由がありました。
サーバー移転前までのことを説明いたしますと、カイユウではUTF-8という文字コードを使用していました。
文字コードに関する細かい説明は省きますが、「特に理由がないならUTF−8でいいでしょ!」という感じで、4年ほどKAI-YOU.netを運営してました。
そして記事を作成しているタイミングで時々起こる問題が、
「記事が途中からぶった切られて保存されてる」
というのもUTF−8の場合、比較的新しい4byteのUTF-8文字列(今回の絵文字以外にも他の国の言語や、非常用漢字などが当てはまります。)は保存できず、その4byte文字を含めそれ以降の文字が消えてしまう。という風になっているのです!
しかもエラーもなくただバッサリと……
(sql_mode = STRICT_TRANS_TABLES だとエラーがでます! また、MySQL5.6以上はデフォルトでsql_mode= STRICT_TRANS_TABLESになってます。 ちなみにsql_modeはSELECT @@GLOBAL.sql_mode;のコマンドで確認できます。)
というわけで絵文字も扱えるようになるし!UTF−8mb4への変換を行ったのでした。
# 使用可能な文字コードの確認
show character set;
# 現状のデータベースの設定確認
SHOW VARIABLES LIKE "chara%";
# 各テーブルの文字コード確認
show table status from `db_name`;
既存のデータベースの変換を行っていきましょう。
# データベースの文字コード変更
alter database `db_name` character set utf8mb4;
# 各テーブルの文字コード変更
alter table `table_name` convert to character set utf8mb4;
また今後のデータベースで作成されるテーブルをmb4にしておきましょう。
my.cnfあたりの設定を編集します。
[client]
- default-character-set = utf8
+ default-character-set = utf8mb4
[mysqld]
- character-set-server = utf8
+ character-set-server = utf8mb4
そして、MySQLを再起動します。
また、弊社でフレームワークとして使っているcakephp側の接続情報(database.php)にも文字コードを指定するところがあるのでそちらも編集しておきます。
# encodingをutf8からutf8mb4に変更する
public $default = array(
'datasource’ => 'Database/Mysql’,
'persistent’ => false,
'host’ => 'hostname’,
'login’ => 'loginname’,
'password’ => 'password’,
'database’ => 'databasename’,
'prefix’ => '’,
'encoding’ => 'utf8mb4’,
);
この設定をしていないと、保存での悲劇はおこらなくなりますが、?で表示されてしまいます。
という感じで、KAI-YOU.net内で絵文字を使えるようになりました!
動いているサーバーで上記のことを一気に行うのは正直怖かったのですが、サーバー移行というナイスタイミングがあったので実施できました!!
記事によりエモさを取り入れ、表現豊かな記事をかけるようにしていきたいと思います!
感情をどうにかするぞ!
KAI-YOUは職種を越えて何かやりたいことを積極的に勉強したり、また自由に取り入れたりしてお仕事ができる会社です。
なにか、これをやってみたい!というチャレンジしたいエンジニアさん、デザイナーさんを募集しています。
一緒に働いてみませんか?
RECRUIT | 株式会社カイユウ - KAI-YOU inc.
以上カイユウ開発部エンジニア、キャベツこうべでした。