SlideShare a Scribd company logo
MySQLの
                           文字コード
                              OSC2011.DB

                           とみたまさひろ
                           日本MySQLユーザ会
                                2011-11-05


MySQLの文字コード - OSC2011.DB          Powered by Rabbit 1.0.4
自己紹介

      ✓ とみたまさひろ
      ✓ 日本MySQLユーザ会
      ✓ 長野ソフトウェア技術者グループ(NSEG)
      ✓ mailto:tommy@mysql.gr.jp
      ✓ id:tmtms
      ✓ @tmtms

                                                 1/30
MySQLの文字コード - OSC2011.DB           Powered by Rabbit 1.0.4
MySQLの
  文字コード
                                         2/30
MySQLの文字コード - OSC2011.DB   Powered by Rabbit 1.0.4
charset
          と
      collation
MySQLの文字コード - OSC2011.DB
                                         3/30
                           Powered by Rabbit 1.0.4
charset

      ✓ コードと文字との対応
      ✓ show charset
      ✓ utf8mb4 : 4バイトUTF-8 (MySQL5.5から)
      ✓ utf8 : 3バイトUTF-8
      ✓ eucjpms, cp932, ...


                                                   4/30
MySQLの文字コード - OSC2011.DB             Powered by Rabbit 1.0.4
collation


      ✓ 文字の照合規則
      ✓ show collation
      ✓ utf8_general_ci, utf8_bin,
        utf8_unicode_ci, ...



                                                     5/30
MySQLの文字コード - OSC2011.DB               Powered by Rabbit 1.0.4
utf8_general_ci


      ✓ charset utf8 のデフォルトの collation
      ✓ ASCII/ラテン文字の大文字小文字を区別しな
        い
      ✓ A=a



                                                           6/30
MySQLの文字コード - OSC2011.DB                     Powered by Rabbit 1.0.4
utf8_bin


      ✓ char(n) binary として宣言した時の collation
      ✓ すべての文字を区別する
      ✓ A != a




                                                    7/30
MySQLの文字コード - OSC2011.DB              Powered by Rabbit 1.0.4
utf8_unicode_ci
      ✓ Unicode Collation Algorithm (UCA) によ
        る collation
      ✓ 全角/半角/カタカナ/ひらがな/濁音を区別し
        ない
      ✓ A=A
      ✓ は=ば=ぱ=ハ=バ=パ=ハ
      ✓ http://tmtm.org/tmp/
        mysql_unicode_collation.html
                                                           8/30
MySQLの文字コード - OSC2011.DB                     Powered by Rabbit 1.0.4
文字コードが関係するもの

      ✓ クライアント
      ✓ 接続
      ✓ データベース
      ✓ テーブル
      ✓ カラム


                                         9/30
MySQLの文字コード - OSC2011.DB   Powered by Rabbit 1.0.4
サーバー変数

          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/ |
          +--------------------------+----------------------------------+



                                                                               10/30
MySQLの文字コード - OSC2011.DB                                           Powered by Rabbit 1.0.4
ハマりたくな
   かったら
  utf8 に統一                             11/30
MySQLの文字コード - OSC2011.DB   Powered by Rabbit 1.0.4
データベース charset


    新たに作られるテーブルのデフォルト charset

               create database db1 charset utf8;
               show create database db1;



                                                          12/30
MySQLの文字コード - OSC2011.DB                      Powered by Rabbit 1.0.4
テーブル charset


    テーブル内のカラムのデフォルト charset

             create table t1 (...) charset utf8;
             show create table t1;



                                                         13/30
MySQLの文字コード - OSC2011.DB                     Powered by Rabbit 1.0.4
カラム charset


    カラム毎に charset 指定可能

                     create table t1 (
                        s char(10) charset cp932,
                        u char(10) charset utf8
                     );



                                                                14/30
MySQLの文字コード - OSC2011.DB                            Powered by Rabbit 1.0.4
接続


    クライアントが発行するクエリ/クライアントに返す結
    果セットの charset

                           set names utf8;




                                                         15/30
MySQLの文字コード - OSC2011.DB                     Powered by Rabbit 1.0.4
自動変換

         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 |
         +--------+--------+
                                                             16/30
MySQLの文字コード - OSC2011.DB                         Powered by Rabbit 1.0.4
文字化
    け
MySQLの文字コード - OSC2011.DB
                                       17/30
                           Powered by Rabbit 1.0.4
「?」

           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 |
           +--------+--------+
                                                                 18/30
MySQLの文字コード - OSC2011.DB                             Powered by Rabbit 1.0.4
「?」
                 mysql> set names cp932;
                 mysql> select * from t1;
                 +------+------+
                 | s    | u    |
                 +------+------+
                 | ?    | ?    |
                 +------+------+
                 mysql> select hex(s),hex(u) from t1;
                 +--------+--------+
                 | hex(s) | hex(u) |
                 +--------+--------+
                 | 3F     | E298BA |
                 +--------+--------+
                                                                19/30
MySQLの文字コード - OSC2011.DB                            Powered by Rabbit 1.0.4
「?」が出たら
    とりあえず
   HEX() で確か
      める
MySQLの文字コード - OSC2011.DB
                                       20/30
                           Powered by Rabbit 1.0.4
接続の 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/ |
          +--------------------------+----------------------------------+



                                                                               21/30
MySQLの文字コード - OSC2011.DB                                           Powered by Rabbit 1.0.4
注意


      ✓ これらの変数はセッション変数
      ✓ 接続毎に異なる値をとりうる
      ✓ PHPから文字化けしてるのに、mysql コマンド
        で確かめても意味ない!



                                            22/30
MySQLの文字コード - OSC2011.DB        Powered by Rabbit 1.0.4
charset を混
  在させないと
  いけない事情
                                       23/30
MySQLの文字コード - OSC2011.DB   Powered by Rabbit 1.0.4
インデックスサイズ



         create table t (
           email char(255) unique
         ) charset utf8mb4;
         ERROR 1071 (42000): Specified key was too long;
         max key length is 767 bytes




                                                               24/30
MySQLの文字コード - OSC2011.DB                           Powered by Rabbit 1.0.4
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 '='



                                                                  25/30
MySQLの文字コード - OSC2011.DB                              Powered by Rabbit 1.0.4
これは大丈夫



                 set names ascii;
                 select * from t2 where u='ABC';

    同じ ASCII と UTF-8 の比較なのに!?



                                                           26/30
MySQLの文字コード - OSC2011.DB                       Powered by Rabbit 1.0.4
優先順位


      ✓ 明示的な collate 指定
      ✓ カラムの collation
      ✓ リテラルの collation




                                              27/30
MySQLの文字コード - OSC2011.DB          Powered by Rabbit 1.0.4
明示的な 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




                                                                          28/30
MySQLの文字コード - OSC2011.DB                                      Powered by Rabbit 1.0.4
ただしカラム
   のインデックス
   が使われなく
   なるので注意
MySQLの文字コード - OSC2011.DB
                                       29/30
                           Powered by Rabbit 1.0.4
まとめ


      ✓ 文字コード周りはややこしい
      ✓ 「?」が出たら HEX()
      ✓ utf8 に揃えると楽チン




                                             30/30
MySQLの文字コード - OSC2011.DB         Powered by Rabbit 1.0.4

More Related Content

What's hot

Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6
Toshi Harada
 
MySQL日本語利用徹底入門
MySQL日本語利用徹底入門MySQL日本語利用徹底入門
MySQL日本語利用徹底入門Mikiya Okuno
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
 
大規模CSVをMySQLに入れる
大規模CSVをMySQLに入れる大規模CSVをMySQLに入れる
大規模CSVをMySQLに入れるShuhei Iitsuka
 
MySQLの文字コード事情
MySQLの文字コード事情MySQLの文字コード事情
MySQLの文字コード事情
Masahiro Tomita
 
MySQL8.0 SYS スキーマ概要
MySQL8.0 SYS スキーマ概要MySQL8.0 SYS スキーマ概要
MySQL8.0 SYS スキーマ概要
Shinya Sugiyama
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
Shogo Wakayama
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
Uptime Technologies LLC (JP)
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
Masahiko Sawada
 
MySQL SYSスキーマのご紹介
MySQL SYSスキーマのご紹介MySQL SYSスキーマのご紹介
MySQL SYSスキーマのご紹介
Shinya Sugiyama
 
OpenStack + Common Lisp
OpenStack + Common LispOpenStack + Common Lisp
OpenStack + Common Lispirix_jp
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 TokyoYoshiyuki Asaba
 
Control distribution of virtual machines
Control distribution of virtual machinesControl distribution of virtual machines
Control distribution of virtual machinesirix_jp
 
JOSUG Meetup 28th Heat 101
JOSUG Meetup 28th Heat 101JOSUG Meetup 28th Heat 101
JOSUG Meetup 28th Heat 101
irix_jp
 
db tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Featuresdb tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Features
Noriyoshi Shinoda
 
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaPostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
Shigeru Hanada
 
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境yut148atgmaildotcom
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
Uptime Technologies LLC (JP)
 
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
Toshi Harada
 
Jpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pubJpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pub
Toshi Harada
 

What's hot (20)

Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6
 
MySQL日本語利用徹底入門
MySQL日本語利用徹底入門MySQL日本語利用徹底入門
MySQL日本語利用徹底入門
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
大規模CSVをMySQLに入れる
大規模CSVをMySQLに入れる大規模CSVをMySQLに入れる
大規模CSVをMySQLに入れる
 
MySQLの文字コード事情
MySQLの文字コード事情MySQLの文字コード事情
MySQLの文字コード事情
 
MySQL8.0 SYS スキーマ概要
MySQL8.0 SYS スキーマ概要MySQL8.0 SYS スキーマ概要
MySQL8.0 SYS スキーマ概要
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
 
MySQL SYSスキーマのご紹介
MySQL SYSスキーマのご紹介MySQL SYSスキーマのご紹介
MySQL SYSスキーマのご紹介
 
OpenStack + Common Lisp
OpenStack + Common LispOpenStack + Common Lisp
OpenStack + Common Lisp
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
 
Control distribution of virtual machines
Control distribution of virtual machinesControl distribution of virtual machines
Control distribution of virtual machines
 
JOSUG Meetup 28th Heat 101
JOSUG Meetup 28th Heat 101JOSUG Meetup 28th Heat 101
JOSUG Meetup 28th Heat 101
 
db tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Featuresdb tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Features
 
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaPostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
 
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
 
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
 
Jpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pubJpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pub
 

Similar to Mysql charset

[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
Ryusuke Kajiyama
 
Introduction of Oracle Database Architecture
Introduction of Oracle Database ArchitectureIntroduction of Oracle Database Architecture
Introduction of Oracle Database Architecture
Ryota Watabe
 
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Masayuki Ozawa
 
5 古雷my sql源碼與資料庫規範
5 古雷my sql源碼與資料庫規範5 古雷my sql源碼與資料庫規範
5 古雷my sql源碼與資料庫規範
Ivan Tu
 
[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0
[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0
[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0
Ryusuke Kajiyama
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLakirahiguchi
 
20160929 inno db_fts_jp
20160929 inno db_fts_jp20160929 inno db_fts_jp
20160929 inno db_fts_jp
yoyamasaki
 
とあるDBAの黒い画面(ターミナル)
とあるDBAの黒い画面(ターミナル)とあるDBAの黒い画面(ターミナル)
とあるDBAの黒い画面(ターミナル)
Kazuhiro Yoshikawa
 
generate_series関数使い込み
generate_series関数使い込みgenerate_series関数使い込み
generate_series関数使い込み
kawarasho
 
textsearch_jaで全文検索
textsearch_jaで全文検索textsearch_jaで全文検索
textsearch_jaで全文検索
Akio Ishida
 
MySQL SQL tuning
MySQL SQL tuningMySQL SQL tuning
MySQL SQL tuning
Tetsuro Nagae
 
Mobageの技術を体験(MyDNS編)
Mobageの技術を体験(MyDNS編)Mobageの技術を体験(MyDNS編)
Mobageの技術を体験(MyDNS編)
Daisuke Ikeda
 
Impala 2.0 Update 日本語版 #impalajp
Impala 2.0 Update 日本語版 #impalajpImpala 2.0 Update 日本語版 #impalajp
Impala 2.0 Update 日本語版 #impalajp
Cloudera Japan
 
MySQL 5.7 InnoDB 日本語全文検索(その2)
MySQL 5.7 InnoDB 日本語全文検索(その2)MySQL 5.7 InnoDB 日本語全文検索(その2)
MySQL 5.7 InnoDB 日本語全文検索(その2)
yoyamasaki
 
OSC ver : MariaDB ColumnStore ベンチマークしちゃいませんか?
OSC ver : MariaDB ColumnStore ベンチマークしちゃいませんか?OSC ver : MariaDB ColumnStore ベンチマークしちゃいませんか?
OSC ver : MariaDB ColumnStore ベンチマークしちゃいませんか?
KAWANO KAZUYUKI
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
Masahiko Sawada
 
MySQL 5.7 InnoDB 日本語全文検索
MySQL 5.7 InnoDB 日本語全文検索MySQL 5.7 InnoDB 日本語全文検索
MySQL 5.7 InnoDB 日本語全文検索
yoyamasaki
 
MySQL 5.7が魅せる新しい運用の形
MySQL 5.7が魅せる新しい運用の形MySQL 5.7が魅せる新しい運用の形
MySQL 5.7が魅せる新しい運用の形
yoku0825
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニングKensuke Nagae
 

Similar to Mysql charset (20)

Mysqlの文字コード
Mysqlの文字コードMysqlの文字コード
Mysqlの文字コード
 
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
 
Introduction of Oracle Database Architecture
Introduction of Oracle Database ArchitectureIntroduction of Oracle Database Architecture
Introduction of Oracle Database Architecture
 
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
 
5 古雷my sql源碼與資料庫規範
5 古雷my sql源碼與資料庫規範5 古雷my sql源碼與資料庫規範
5 古雷my sql源碼與資料庫規範
 
[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0
[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0
[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
20160929 inno db_fts_jp
20160929 inno db_fts_jp20160929 inno db_fts_jp
20160929 inno db_fts_jp
 
とあるDBAの黒い画面(ターミナル)
とあるDBAの黒い画面(ターミナル)とあるDBAの黒い画面(ターミナル)
とあるDBAの黒い画面(ターミナル)
 
generate_series関数使い込み
generate_series関数使い込みgenerate_series関数使い込み
generate_series関数使い込み
 
textsearch_jaで全文検索
textsearch_jaで全文検索textsearch_jaで全文検索
textsearch_jaで全文検索
 
MySQL SQL tuning
MySQL SQL tuningMySQL SQL tuning
MySQL SQL tuning
 
Mobageの技術を体験(MyDNS編)
Mobageの技術を体験(MyDNS編)Mobageの技術を体験(MyDNS編)
Mobageの技術を体験(MyDNS編)
 
Impala 2.0 Update 日本語版 #impalajp
Impala 2.0 Update 日本語版 #impalajpImpala 2.0 Update 日本語版 #impalajp
Impala 2.0 Update 日本語版 #impalajp
 
MySQL 5.7 InnoDB 日本語全文検索(その2)
MySQL 5.7 InnoDB 日本語全文検索(その2)MySQL 5.7 InnoDB 日本語全文検索(その2)
MySQL 5.7 InnoDB 日本語全文検索(その2)
 
OSC ver : MariaDB ColumnStore ベンチマークしちゃいませんか?
OSC ver : MariaDB ColumnStore ベンチマークしちゃいませんか?OSC ver : MariaDB ColumnStore ベンチマークしちゃいませんか?
OSC ver : MariaDB ColumnStore ベンチマークしちゃいませんか?
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 
MySQL 5.7 InnoDB 日本語全文検索
MySQL 5.7 InnoDB 日本語全文検索MySQL 5.7 InnoDB 日本語全文検索
MySQL 5.7 InnoDB 日本語全文検索
 
MySQL 5.7が魅せる新しい運用の形
MySQL 5.7が魅せる新しい運用の形MySQL 5.7が魅せる新しい運用の形
MySQL 5.7が魅せる新しい運用の形
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
 

More from Masahiro Tomita

お前の罪を数えろ
お前の罪を数えろお前の罪を数えろ
お前の罪を数えろ
Masahiro Tomita
 
Ruby 2.5
Ruby 2.5Ruby 2.5
Ruby 2.5
Masahiro Tomita
 
本当はこわいMySQLプロトコル
本当はこわいMySQLプロトコル本当はこわいMySQLプロトコル
本当はこわいMySQLプロトコル
Masahiro Tomita
 
ネットワークこわい
ネットワークこわいネットワークこわい
ネットワークこわい
Masahiro Tomita
 
CSV
CSVCSV
MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版
Masahiro Tomita
 
MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版
Masahiro Tomita
 
Ruby24
Ruby24Ruby24
「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル
Masahiro Tomita
 
MyNAができるまで
MyNAができるまでMyNAができるまで
MyNAができるまで
Masahiro Tomita
 
文字化け
文字化け文字化け
文字化け
Masahiro Tomita
 
Crystal
CrystalCrystal
文字化け
文字化け文字化け
文字化け
Masahiro Tomita
 
アジャイルジャパン長野サテライト
アジャイルジャパン長野サテライトアジャイルジャパン長野サテライト
アジャイルジャパン長野サテライトMasahiro Tomita
 
🍣=🍺
🍣=🍺🍣=🍺
🍣=🍺
Masahiro Tomita
 
本当はこわいエンコーディングの話
本当はこわいエンコーディングの話本当はこわいエンコーディングの話
本当はこわいエンコーディングの話
Masahiro Tomita
 

More from Masahiro Tomita (20)

お前の罪を数えろ
お前の罪を数えろお前の罪を数えろ
お前の罪を数えろ
 
Ruby 2.5
Ruby 2.5Ruby 2.5
Ruby 2.5
 
本当はこわいMySQLプロトコル
本当はこわいMySQLプロトコル本当はこわいMySQLプロトコル
本当はこわいMySQLプロトコル
 
ネットワークこわい
ネットワークこわいネットワークこわい
ネットワークこわい
 
CSV
CSVCSV
CSV
 
MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版
 
MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版
 
Ruby24
Ruby24Ruby24
Ruby24
 
進捗と品質
進捗と品質進捗と品質
進捗と品質
 
MySQLを拡張する
MySQLを拡張するMySQLを拡張する
MySQLを拡張する
 
「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル
 
MyNAができるまで
MyNAができるまでMyNAができるまで
MyNAができるまで
 
文字化け
文字化け文字化け
文字化け
 
Crystal
CrystalCrystal
Crystal
 
メールの暗号化
メールの暗号化メールの暗号化
メールの暗号化
 
文字化け
文字化け文字化け
文字化け
 
進捗と品質
進捗と品質進捗と品質
進捗と品質
 
アジャイルジャパン長野サテライト
アジャイルジャパン長野サテライトアジャイルジャパン長野サテライト
アジャイルジャパン長野サテライト
 
🍣=🍺
🍣=🍺🍣=🍺
🍣=🍺
 
本当はこわいエンコーディングの話
本当はこわいエンコーディングの話本当はこわいエンコーディングの話
本当はこわいエンコーディングの話
 

Recently uploaded

遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
Takayuki Nakayama
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 

Recently uploaded (10)

遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 

Mysql charset

  • 1. MySQLの 文字コード OSC2011.DB とみたまさひろ 日本MySQLユーザ会 2011-11-05 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 2. 自己紹介 ✓ とみたまさひろ ✓ 日本MySQLユーザ会 ✓ 長野ソフトウェア技術者グループ(NSEG) ✓ mailto:tommy@mysql.gr.jp ✓ id:tmtms ✓ @tmtms 1/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 3. MySQLの 文字コード 2/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 4. charset と collation MySQLの文字コード - OSC2011.DB 3/30 Powered by Rabbit 1.0.4
  • 5. charset ✓ コードと文字との対応 ✓ show charset ✓ utf8mb4 : 4バイトUTF-8 (MySQL5.5から) ✓ utf8 : 3バイトUTF-8 ✓ eucjpms, cp932, ... 4/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 6. collation ✓ 文字の照合規則 ✓ show collation ✓ utf8_general_ci, utf8_bin, utf8_unicode_ci, ... 5/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 7. utf8_general_ci ✓ charset utf8 のデフォルトの collation ✓ ASCII/ラテン文字の大文字小文字を区別しな い ✓ A=a 6/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 8. utf8_bin ✓ char(n) binary として宣言した時の collation ✓ すべての文字を区別する ✓ A != a 7/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 9. utf8_unicode_ci ✓ Unicode Collation Algorithm (UCA) によ る collation ✓ 全角/半角/カタカナ/ひらがな/濁音を区別し ない ✓ A=A ✓ は=ば=ぱ=ハ=バ=パ=ハ ✓ http://tmtm.org/tmp/ mysql_unicode_collation.html 8/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 10. 文字コードが関係するもの ✓ クライアント ✓ 接続 ✓ データベース ✓ テーブル ✓ カラム 9/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 11. サーバー変数 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/ | +--------------------------+----------------------------------+ 10/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 12. ハマりたくな かったら utf8 に統一 11/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 13. データベース charset 新たに作られるテーブルのデフォルト charset create database db1 charset utf8; show create database db1; 12/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 14. テーブル charset テーブル内のカラムのデフォルト charset create table t1 (...) charset utf8; show create table t1; 13/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 15. カラム charset カラム毎に charset 指定可能 create table t1 ( s char(10) charset cp932, u char(10) charset utf8 ); 14/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 16. 接続 クライアントが発行するクエリ/クライアントに返す結 果セットの charset set names utf8; 15/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 17. 自動変換 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 | +--------+--------+ 16/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 18. 文字化 け MySQLの文字コード - OSC2011.DB 17/30 Powered by Rabbit 1.0.4
  • 19. 「?」 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 | +--------+--------+ 18/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 20. 「?」 mysql> set names cp932; mysql> select * from t1; +------+------+ | s | u | +------+------+ | ? | ? | +------+------+ mysql> select hex(s),hex(u) from t1; +--------+--------+ | hex(s) | hex(u) | +--------+--------+ | 3F | E298BA | +--------+--------+ 19/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 21. 「?」が出たら とりあえず HEX() で確か める MySQLの文字コード - OSC2011.DB 20/30 Powered by Rabbit 1.0.4
  • 22. 接続の 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/ | +--------------------------+----------------------------------+ 21/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 23. 注意 ✓ これらの変数はセッション変数 ✓ 接続毎に異なる値をとりうる ✓ PHPから文字化けしてるのに、mysql コマンド で確かめても意味ない! 22/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 24. charset を混 在させないと いけない事情 23/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 25. インデックスサイズ create table t ( email char(255) unique ) charset utf8mb4; ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes 24/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 26. 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 '=' 25/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 27. これは大丈夫 set names ascii; select * from t2 where u='ABC'; 同じ ASCII と UTF-8 の比較なのに!? 26/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 28. 優先順位 ✓ 明示的な collate 指定 ✓ カラムの collation ✓ リテラルの collation 27/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 29. 明示的な 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 28/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4
  • 30. ただしカラム のインデックス が使われなく なるので注意 MySQLの文字コード - OSC2011.DB 29/30 Powered by Rabbit 1.0.4
  • 31. まとめ ✓ 文字コード周りはややこしい ✓ 「?」が出たら HEX() ✓ utf8 に揃えると楽チン 30/30 MySQLの文字コード - OSC2011.DB Powered by Rabbit 1.0.4