Fork me on GitHub

Mysql 5.0の文字コード

  • Jan 27, 2009

categoryプラグインは存在しません。

データベース、テーブルの文字コード

MySQL5.0から、文字コードの扱いが少し変わっている。データベース作成時に、

CREATE DATABASE hoge CHARACTER SET SJIS;

というように文字コードを指定すると、データベースの文字コードを指定できる。これは、

SHOW CREATE DATABASE hoge;

とすると後から確認できる。

文字コードを指定せずにテーブルを作成してしまうと、それぞれのテーブルが文字コード情報を保持するため、データベースの文字コードを変更してもテーブルの文字コードは変更されない。テーブルの文字コードは、以下のようにして調べる。

SHOW FULL COLUMNS FROM hoge_table;

Collationが目的の文字コードになっていない場合、ALTERを使って変更するかデータベースを作成し直す。

Javaからの利用

JavaからJDBCで利用する場合、基本的に新しいドライバ(mysql-connector-java-*.jar)を利用する。古いmysqlJDBC.jarなどが共存していると、動作がおかしくなることがある。

接続先URL指定の際、以下のように文字コードの指定を追加する。

jdbc:mysql://localhost/hoge?useUnicode=true&characterEncoding=SJIS

XML系の設定ファイルの場合、&を&にするのを忘れないこと。

環境の確認

正しく文字コードが扱えるかどうかは、MySQLに接続したクライアントから

SHOW VARIABLES LIKE 'character%';

とすると確認できる。

+--------------------------+----------------------------------------+
| Variable_name            | Value                                  |
+--------------------------+----------------------------------------+
| character_set_client     | sjis                                   |
| character_set_connection | sjis                                   |
| character_set_database   | sjis                                   |
| character_set_results    | sjis                                   |
| character_set_server     | latin1                                 |
| character_set_system     | utf8                                   |
| character_sets_dir       | D:\App\Dev\xampp\mysql\share\charsets\ |
+--------------------------+----------------------------------------+

上4つが同じ文字コードであれば問題なし。

コメント

  • 非常に参考になりました。ありがとうございます。 - tnbys (2006年07月05日 01時29分55秒)
  • 非常に参考になりました あと 上4とあるものをそれぞれ変更する方法があれば教えていただければと思います - fujimoto (2008年01月09日 16時36分29秒)
  • JDBCの接続文字列に文字コードを指定する方法は非常に参考になりました。ありがとうございます。 - mianlan (2009年01月23日 16時33分35秒)
  • ちなみに、WindowsではSJISではなくcp932を使うと文字化けを防げます。 - Yoshimov (2009年01月27日 13時13分38秒)

commentプラグインは存在しません。