SlideShare une entreprise Scribd logo
1  sur  31
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6Toshi Harada
 
MySQL日本語利用徹底入門
MySQL日本語利用徹底入門MySQL日本語利用徹底入門
MySQL日本語利用徹底入門Mikiya Okuno
 
大規模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 101irix_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 FeaturesNoriyoshi Shinoda
 
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaPostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaShigeru 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.5Toshi Harada
 
Jpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pubJpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pubToshi Harada
 

Tendances (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
 

Similaire à 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 ArchitectureRyota 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.0Ryusuke 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_jpyoyamasaki
 
とある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
 
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 日本語版 #impalajpCloudera 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
 
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
 

Similaire à 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 チューニング
 

Plus de Masahiro Tomita

お前の罪を数えろ
お前の罪を数えろお前の罪を数えろ
お前の罪を数えろMasahiro Tomita
 
本当はこわいMySQLプロトコル
本当はこわいMySQLプロトコル本当はこわいMySQLプロトコル
本当はこわいMySQLプロトコルMasahiro Tomita
 
ネットワークこわい
ネットワークこわいネットワークこわい
ネットワークこわいMasahiro Tomita
 
MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版Masahiro Tomita
 
MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版Masahiro Tomita
 
「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャルMasahiro Tomita
 
アジャイルジャパン長野サテライト
アジャイルジャパン長野サテライトアジャイルジャパン長野サテライト
アジャイルジャパン長野サテライトMasahiro Tomita
 
本当はこわいエンコーディングの話
本当はこわいエンコーディングの話本当はこわいエンコーディングの話
本当はこわいエンコーディングの話Masahiro Tomita
 

Plus de 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
 
メールの暗号化
メールの暗号化メールの暗号化
メールの暗号化
 
文字化け
文字化け文字化け
文字化け
 
進捗と品質
進捗と品質進捗と品質
進捗と品質
 
アジャイルジャパン長野サテライト
アジャイルジャパン長野サテライトアジャイルジャパン長野サテライト
アジャイルジャパン長野サテライト
 
🍣=🍺
🍣=🍺🍣=🍺
🍣=🍺
 
本当はこわいエンコーディングの話
本当はこわいエンコーディングの話本当はこわいエンコーディングの話
本当はこわいエンコーディングの話
 

Dernier

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 

Dernier (9)

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 

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