Your SlideShare is downloading. ×
0
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Mysqlの文字コード
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Mysqlの文字コード

6,358

Published on

Published in: Lifestyle, Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,358
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
67
Comments
0
Likes
5
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. MySQLの 文字コード とみたまさひろ 2011-04-29MySQLの文字コード Powered by Rabbit 0.9.2
  • 2. 自己紹介 ✓ とみた まさひろ ✓ プログラマー ✓ mailto:tommy@tmtm.org ✓ http://d.hatena.ne.jp/tmtms ✓ http://twitter.com/tmtms 1/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 3. 自己紹介 ✓ 日本Rubyの会 ✓ 日本MySQLユーザ会 ✓ 長野ソフトウェア技術者グループ 2/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 4. 自己紹介 こんな本書きました 3/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 5. 自己紹介 デブサミ2011 で LT やりました 4/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 6. ベストバリュー賞!! 5/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 7. NSEG ✓ #1 Rubyの黒魔術 ✓ #3 はじめてのRuby拡張ライブラ リ ✓ #6 Ruby紹介 ✓ #11 RSpecとCucumber ✓ #13 システムコール 6/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 8. MySQLの 文字コー ドMySQLの文字コード 7/36 Powered by Rabbit 0.9.2
  • 9. MySQL とは(ryMySQLの文字コード 8/36 Powered by Rabbit 0.9.2
  • 10. charset と collationMySQLの文字コード 9/36 Powered by Rabbit 0.9.2
  • 11. charset ✓ コードと文字との対応 ✓ show charset ✓ utf8mb4 : 4バイトUTF-8 (MySQL5.5から) ✓ utf8 : 3バイトUTF-8 ✓ eucjpms, cp932, ... 10/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 12. collation ✓ 文字の照合規則 ✓ show collation ✓ utf8_general_ci, utf8_bin, utf8_unicode_ci, ... 11/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 13. utf8_general_ci ✓ charset utf8 のデフォルトの collation ✓ ASCII/ラテン文字の大文字小文 字を区別しない ✓A = a 12/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 14. utf8_bin ✓ char(n) binary として宣言した時 の collation ✓ すべての文字を区別する ✓ A != a 13/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 15. utf8_unicode_ci ✓ Unicode Collation Algorithm (UCA) に従った collation ✓ 全角/半角/カタカナ/ひらがなを 区別しない ✓ http://tmtm.org/tmp/mysql_unicode_collation.html 14/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 16. 文字コードが関係するもの ✓ クライアント ✓ 接続 ✓ データベース ✓ テーブル ✓ カラム 15/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 17. サーバー変数 mysql> show variables like char%; +--------------------------+----------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql/share/charsets/ | +--------------------------+----------------------------------+ 16/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 18. 楽したかっ たら utf8 に統一MySQLの文字コード 17/36 Powered by Rabbit 0.9.2
  • 19. データベース charset 新たに作られるテーブルのデフォルト charset create database db1 charset utf8; show create database db1; 18/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 20. テーブル charset テーブル内のカラムのデフォルト charset create table t1 (...) charset utf8; show create table t1; 19/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 21. カラム charset カラム毎に charset 指定可能 create table t1 ( s char(10) charset cp932, u char(10) charset utf8 ); 20/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 22. 接続 クライアントが発行するクエリ/クライア ントに返す結果セットの charset set names utf8; 21/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 23. 自動変換 mysql> insert into t1 (s,u) values (あ,あ); mysql> select * from t1; +------+------+ | s | u | +------+------+ | あ | あ | +------+------+ mysql> select hex(s),hex(u) from t1; +--------+--------+ | hex(s) | hex(u) | +--------+--------+ | 82A0 | E38182 | +--------+--------+ 22/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 24. 文字化 けMySQLの文字コード 23/36 Powered by Rabbit 0.9.2
  • 25. 「?」 mysql> insert into t1 (s,u) values (☺, ☺); mysql> select * from t1; +------+------+ | s | u | +------+------+ | ? | ☺ | +------+------+ mysql> select hex(s),hex(u) from t1; +--------+--------+ | hex(s) | hex(u) | +--------+--------+ | 3F | E298BA | +--------+--------+ 24/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 26. 「?」 mysql> set names cp932; mysql> select * from t1; +------+------+ | s | u | +------+------+ | ? | ? | +------+------+ mysql> select hex(s),hex(u) from t1; +--------+--------+ | hex(s) | hex(u) | +--------+--------+ | 3F | E298BA | +--------+--------+ 25/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 27. 「?」が出たら とりあえず HEX() で確か めるMySQLの文字コード 26/36 Powered by Rabbit 0.9.2
  • 28. 接続の charset を確かめる mysql> show variables like char%; +--------------------------+----------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql/share/charsets/ | +--------------------------+----------------------------------+ 27/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 29. 注意 ✓ これらの変数はセッション変数 ✓ 接続毎に異なる値をとりうる ✓ PHPから文字化けしてるのに、 mysql コマンドで確かめても意味 ない! 28/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 30. charest を混 在させないと いけない事情 29/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 31. インデックスサイズ create table t ( email char(255) unique ) charset utf8mb4; ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes 30/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 32. Illegal mix of collations create table t2 ( a char(10) charset ascii, u char(10) charset utf8 ); select * from t2 where a=あ; ERROR 1267 (HY000): Illegal mix of collations (ascii_general_ci,IMPLICIT) and (utf8_general_ci, COERCIBLE) for operation = 31/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 33. これは大丈夫 set names ascii; select * from t2 where u=ABC; 同じ ASCII と UTF-8 の比較なのに!? 32/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 34. 優先順位 ✓ 明示的な collate 指定 ✓ カラムの collation ✓ リテラルの collation 33/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 35. 明示的な collate select * from t2 where a=あ; ERROR 1267 (HY000): Illegal mix of collations (ascii_general_ci,IMPLICIT) and (utf8_general_ci, COERCIBLE) for operation = select * from t2 where a=あ collate utf8_general_ci; → OK 34/36MySQLの文字コード Powered by Rabbit 0.9.2
  • 36. ただしカラム のインデックス が使われなく なるので注意MySQLの文字コード 35/36 Powered by Rabbit 0.9.2
  • 37. まとめ ✓ 文字コード周りはややこしい ✓ 「?」が出たら HEX() ✓ utf8 に揃えると楽チン 36/36MySQLの文字コード Powered by Rabbit 0.9.2

×