EIシリーズ コネクタ · 2014-04-29 · eiシリーズ コネクタ ゼネラルカタログ 嵌合図 種類、嵌合組合せ( )内は極数 電線対基板接続の嵌合組合せ
寿司blogが書けなくて嵌った話(MySQL/絵文字対応)
-
Upload
kenichiro-matohara -
Category
Technology
-
view
912 -
download
2
description
Transcript of 寿司blogが書けなくて嵌った話(MySQL/絵文字対応)
Kenichiro MATOHARA
● ID : matoken● http://matoken.org/
● 興味– Linux
– FLOSS
– OpenSteetmap– 電子工作– :
鹿児島らぐ
● 今のところ鹿児島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.htmlThe 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,ALTERON test_utf8.*TO test_utf8@localhostIDENTIFIED 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,ALTERON test_utf8.*TO test_utf8@localhostIDENTIFIED 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バイト取られてますが,「🍣」 ではなく「????」になってしまっています….
文字コードを確認
$ mysqldump -uroot -p -t test_utf8 moji | grep 'INSERT INTO'|od -xc0000000 4e49 4553 5452 4920 544e 204f 6d60 6a6f I N S E R T I N T O ` m o j0000020 6069 5620 4c41 4555 2053 3128 272c 81e3 i ` V A L U E S ( 1 , ' 343 2010000040 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 u0000100 6973 2927 0a3b s i ' ) ; \n0000106
`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 selectedmysql> 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で寿司の投稿に成功!
別解
● 数値文字参照…
🍣
● dbのバージョンを上げられないならおすすめ.
ミ