Last-modified: 2014-08-02 (土) 20:41:44
MySQL/日本語が化ける

現象

日本語のデータを挿入し、結果を表示すると「???」のように化けていました。

原因

対策

方法

  1. 以下のSQL文を実行し、現在の文字コードセットを確認します。
    Everything is expanded.Everything is shortened.
      1
    
     
    
    show variables like "char%";
    今回はこのような結果が得られました。
    文字コードセットをlatin1からUTF-8へ変更します。
    Variable_nameValue
    character_set_clientlatin1
    character_set_connectionlatin1
    character_set_databaselatin1
    character_set_filesystembinary
    character_set_resultslatin1
    character_set_serverlatin1
    character_set_systemlatin1
    character_sets_dirC:\Program Files (x86)\VertrigoServ\Mysql\share\charsets\
  2. my.iniを開きます。
    WS000001.PNG
  3. mysqld、mysqldump、mysqlセクションに以下のキーを追加します。
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
    
    [mysqld]
    # ~途中省略~
    # デフォルト文字コードセット
    default-character-set=utf8
    # 自動で文字コード変換しない
    skip-character-set-client-handshake
     
    [mysqldump]
    # ~途中省略~
    # デフォルト文字コードセット
    default-character-set=utf8
     
    [mysql]
    # ~途中省略~
    # デフォルト文字コードセット
    default-character-set=utf8
  4. サービスを再起動します。
    WS000002.PNG
  5. 再び文字コードセットを確認します。
    Everything is expanded.Everything is shortened.
      1
    
     
    
    show variables like "char%";
    文字コードセットがUTF-8に変更されていることを確認します。
    Variable_nameValue
    character_set_clientutf8
    character_set_connectionutf8
    character_set_databaseutf8
    character_set_filesystembinary
    character_set_resultsutf8
    character_set_serverutf8
    character_set_systemutf8
    character_sets_dirC:\Program Files (x86)\VertrigoServ\Mysql\share\charsets\
  6. 最後に、日本語データを挿入出来るか確認して終了です。
    ただ、私の場合はこの段階で日本語データを挿入しても失敗しました。
    挿入しようとしたDBを確認すると、照合順序が「latin1_swedish_ci」となっていました。
    テスト用のDBだったので、照合順序の変更ではなく、削除&再作成を行いました。
    再作成されたデータベースは、照合順序が「utf8_general_ci」となり、この段階で日本語データの挿入が成功しました。

検証時の環境

参考