SlideShare a Scribd company logo
寿司blogがかけなくて嵌った話
KenichiroMATOHARA(matoken)
<matoken@kagolug.org>
鹿児島Linux勉強会
2014-09-27(Fri)
Kenichiro MATOHARA
● ID : matoken
● http://matoken.org/
●
興味
– Linux
– FLOSS
– OpenSteetmap
– 電子工作
– :
「鹿児島らぐ(Kagoshima Linux User
Group)」を立ち上げました
http://kagolug.org/
鹿児島のお友達に教えてあげてね
鹿児島らぐ
●
今のところ鹿児島Linux勉強会を月1回開催
– 今回で0-5で6回開催
●
鹿児島Linux勉強会
– Linux読書会
– Linux関連の発表
●
その他
– OSMもそろそろやりたい
– 明日 > "鹿児島 OpenStreetMap mini mapping party! : ATND"
https://atnd.org/events/56893
●
自己紹介 18:00〜
●
Linux読書会〜19:30
●
休憩 〜19:40
●
発表 〜20:50
●
撤収 20:50
●
懇親会(てげWeb合同)
寿司Blog を書こうとして嵌まる
     ミ
WordPressで寿司(絵文字)について
のエントリを書こうとする
WordPressで絵文字以降が保存時に
消えてしまう
保存
WordPressの問題?
●
絵文字プラグインとかあるし絵文字使ってる人
も居る
●
Versionも問題無さそう
DB(MySQL)の問題!
●
MySQL 5.5.3 より前は3バイトまでの対応
●
MySQL 5.5.3 以降で4バイトに対応して
Unicode6 の絵文字「�(寿司)」や「�(ほっけ)」
とかもOKに
●
dbの文字コードはutf8のままではダメで
utf8mb4 にする必要があるそう
リリースノートより
● “MySQL :: MySQL 5.5 Release Notes ::
Changes in MySQL 5.5.3 (2010-03-24,
Milestone 3)”
http://dev.mysql.com/doc/relnotes/mysql/5.5/en
/news-5-5-3.html
The utf8mb4 character set has been added.
This is similar to utf8, but its encoding
allows up to four bytes per character to
enable support for supplementary
characters.
ディストリビューションの対応状況
● CentOS 6.5 の環境は未だ多そう
※Debianはパッケージ管理コマンドより,その他はDistroWatch より確認 http://distrowatch.com/
実際に試してみる
●
環境
– Debian Wheezy
– MySQL 5.5.38-0+wheezy1
db utf8 で 4バイト文字を書き込ん
でみる
aa
GRANT
SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER
ON test_utf8.*
TO test_utf8@localhost
IDENTIFIED BY 'XXXXXXXXXX';
CREATE DATABASE test_utf8 CHARACTER SET utf8;
USE test_utf8;
CREATE TABLE test_utf8.moji(id int, moji text);
INSERT INTO test_utf8.moji(id, moji) values( '1', 'あいうえお' );
INSERT INTO test_utf8.moji(id, moji) values( '2', '寿司�susi' );
FLUSH PRIVILEGES;
$ mysqldump -uroot -p -t test_utf8 moji | grep 'INSERT INTO'
INSERT INTO `moji` VALUES (1,'あいうえお'),(2,'寿司');
4バイト文字以降が消えた → WordPress での動きと一緒
一旦db削除
DROP DATABASE test_utf8;
DELETE FROM mysql.user WHERE user='test_utf8' and
host='localhost';
FLUSH PRIVILEGES;
db にutf8mb4を指定して4バイト文
字を書き込んでみる
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER
ON test_utf8.*
TO test_utf8@localhost
IDENTIFIED BY 'XXXXXXXXXXXXX';
CREATE DATABASE test_utf8 CHARACTER SET utf8mb4;
USE test_utf8;
CREATE TABLE test_utf8.moji(id int, moji text) CHARACTER SET
utf8mb4;
INSERT INTO test_utf8.moji(id, moji) values( '1', 'あいうえお' );
INSERT INTO test_utf8.moji(id, moji) values( '2', '寿司�susi');
FLUSH PRIVILEGES;
$ mysqldump -uroot -p -t test_utf8 moji | grep 'INSERT INTO'
Enter password:
INSERT INTO `moji` VALUES (1,'あいうえお'),(2,'寿司????susi');
あれ?4バイト取られてますが,「&#x01f363;」 ではなく「????」になってしまっ
ています….
文字コードを確認
$ mysqldump -uroot -p -t test_utf8 moji | grep 'INSERT INTO'|od -xc
0000000 4e49 4553 5452 4920 544e 204f 6d60 6a6f
I N S E R T I N T O ` m o j
0000020 6069 5620 4c41 4555 2053 3128 272c 81e3
i ` V A L U E S ( 1 , ' 343 201
0000040 e382 8481 81e3 e386 8881 81e3 278a 2c29
202 343 201 204 343 201 206 343 201 210 343 201 212 ' ) ,
0000060 3228 272c afe5 e5bf b88f 3f3f 3f3f 7573
( 2 , ' 345 257 277 345 217 270 ? ? ? ? s u
0000100 6973 2927 0a3b
s i ' ) ; n
0000106
`3f` なのでそのまま `?` ですね….
ファイルから書き込んでるので途中でおかしくなってるのかも?
MySQL の端末から書いてみる
mysql> INSERT INTO test_utf8.moji(id, moji) values( '3', '寿司
�ssusi' );
Query OK, 1 row affected (0.05 sec)
mysql> select * from moji;
ERROR 1046 (3D000): No database selected
mysql> select * from test_utf8.moji;
+------+-----------------+
| id | moji |
+------+-----------------+
| 1 | あいうえお |
| 2 | 寿司????susi |
| 3 | 寿司�ssusi |
+------+-----------------+
3 rows in set (0.00 sec)
OKぽい
dbの変換
●
utf8のdbをutf8mb4に変換する
mysql> alter table dbname convert to
character set utf8mb4;
– 念の為実行前にバックアップはとっとく
WordPress側の設定
$ tail -3 /etc/wordpress/config-org.php
define('DB_CHARSET', 'utf8mb4');
define('DB_COLLATE', 'utf8mb4_general_ci');
?>
WordPressで寿司の投稿に成功!
別解
●
数値文字参照…
&#x01f363;
●
dbのバージョンを上げられないならおすすめ.
     ミ

More Related Content

PDF
Linux デスクトップ環境のセキュリティを考えてみる
PDF
鹿児島らぐはじめました
PDF
鹿児島Linux勉強会2016.04
PDF
オープンソースカンファレンス大分参加報告 & 勉強会向けサーバを作ってみる
PPTX
Azure のポータル画面で、AI フレーバな BOT の作成ハンズオン
PDF
MySQLステータスモニタリング
ODP
「BluetoothでLinuxマシンとAndroidを繋いで話が出来るようにした話」「台風で停電になって省電力の設定をした話」「ネットワークの設定が引き...
PPTX
A Hacking Toolset for Big Tabular Files -- JAPAN.PM 2021
Linux デスクトップ環境のセキュリティを考えてみる
鹿児島らぐはじめました
鹿児島Linux勉強会2016.04
オープンソースカンファレンス大分参加報告 & 勉強会向けサーバを作ってみる
Azure のポータル画面で、AI フレーバな BOT の作成ハンズオン
MySQLステータスモニタリング
「BluetoothでLinuxマシンとAndroidを繋いで話が出来るようにした話」「台風で停電になって省電力の設定をした話」「ネットワークの設定が引き...
A Hacking Toolset for Big Tabular Files -- JAPAN.PM 2021

Similar to 寿司blogが書けなくて嵌った話(MySQL/絵文字対応) (17)

PDF
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
PDF
Es6 cognition
PDF
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
PDF
Linux女子部第二回勉強会usp友の会
PDF
新春対談「新しい司会者、出てこいや〜!」(対戦者数調査結果付き)
PDF
ハードウェア脳とソフトウェア脳
PDF
250426 SlimeVRのトラッカーを作った話 エンジニア集会LT会 #14
PDF
Email is Slack
PDF
MySQLのGIS機能とか超入門 ~MyNA会2018年7月
PDF
ES6 はじめました
PDF
Index shotgun on mysql5.6
PDF
Introduction to workqueue
PDF
StackExchangeで見たシステムプログラミング案件
PDF
MySQLに本格GIS機能がやってきた~MySQL8.0最新情報~@OSC2018北海道
PDF
[db tech showcase Tokyo 2015] A14:Amazon Redshiftの元となったスケールアウト型カラムナーDB徹底解説 その...
PDF
IPメッセージングはこうやって実装するのだ!
PDF
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
Es6 cognition
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
Linux女子部第二回勉強会usp友の会
新春対談「新しい司会者、出てこいや〜!」(対戦者数調査結果付き)
ハードウェア脳とソフトウェア脳
250426 SlimeVRのトラッカーを作った話 エンジニア集会LT会 #14
Email is Slack
MySQLのGIS機能とか超入門 ~MyNA会2018年7月
ES6 はじめました
Index shotgun on mysql5.6
Introduction to workqueue
StackExchangeで見たシステムプログラミング案件
MySQLに本格GIS機能がやってきた~MySQL8.0最新情報~@OSC2018北海道
[db tech showcase Tokyo 2015] A14:Amazon Redshiftの元となったスケールアウト型カラムナーDB徹底解説 その...
IPメッセージングはこうやって実装するのだ!
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
Ad

More from Kenichiro MATOHARA (20)

PDF
PQI Air Pen Hack
PDF
ゲーミングプラットホームのLutris
PDF
USBを保護するUSBGuard
PDF
Raspberry PiのUSB OTGを試す
PDF
Let’s Encrypt更新話
PDF
Raspberry piのsdl等に対応したreal vncを試してみた
PDF
ちょっと古いマシンにLinuxを
PDF
Raspberry Piにdiskless modeのalpine linuxを導入してみる
PDF
勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る
PDF
OSC15OT 配布ペーパー
PDF
鹿児島らぐはじめました(オープンソースカンファレンス2015大分LT)
PDF
鹿児島らぐC87配布ペーパー
PDF
鹿児島に引っ越しました
PDF
技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい2
PDF
鹿児島のOSM状況
PDF
鹿児島らぐはじめました & オープ ンソースアンカンファレンス鹿児 島のお誘い
PDF
技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい
PDF
Kof2014 kgo lug
PDF
ownCloud + andoroid + picasa + flickr連携
PDF
Pipelight でSilverlightを / RaspberryPi でリアルタイム動画配信をその3
PQI Air Pen Hack
ゲーミングプラットホームのLutris
USBを保護するUSBGuard
Raspberry PiのUSB OTGを試す
Let’s Encrypt更新話
Raspberry piのsdl等に対応したreal vncを試してみた
ちょっと古いマシンにLinuxを
Raspberry Piにdiskless modeのalpine linuxを導入してみる
勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る
OSC15OT 配布ペーパー
鹿児島らぐはじめました(オープンソースカンファレンス2015大分LT)
鹿児島らぐC87配布ペーパー
鹿児島に引っ越しました
技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい2
鹿児島のOSM状況
鹿児島らぐはじめました & オープ ンソースアンカンファレンス鹿児 島のお誘い
技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい
Kof2014 kgo lug
ownCloud + andoroid + picasa + flickr連携
Pipelight でSilverlightを / RaspberryPi でリアルタイム動画配信をその3
Ad

寿司blogが書けなくて嵌った話(MySQL/絵文字対応)