アットウィキロゴ

MySQL4.1⇔Java文字化け対策

MySQLとJavaの間でのデータのやり取りに際して・・・。
 
自動変換は、Unicodeを基準にしてそれぞれのキャラクタセットに変換しているので、データベース自体はUnicode(utf8)で良い。
 
・データベースから抽出して表示
・クライアントから入力した日本語で検索する
のもこれでOK! (バージョン4.1以降)
 
MySQLとのやり取りでは、文字コード変換メソッドが不要になる。
 
Jspには、ページコンテキストでキャラクターセットを指定する。
<%@ page contentType="text/html; charset=Windows-31J" %>
 
1)クライアントのキャラクターセットを cp932 にする
----------
mysql>SET NAMES cp932;
----------
 
※MySQLの cp932 とは、Javaの"Windows-31J"に対応してるキャラクターセット。
※SJP側で、MySQLに接続した直後 SET NAMES cp932 を流すこと。
※ちなみに、Mysqlのキャラクターセットを確認するには、このコマンド
----------
mysql> SHOW VARIABLES LIKE 'character\_set\_%';
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| character_set_client     | cp932  | ★クライアントから入力された文字のキャラクタセット
| character_set_connection | cp932  | ★テーブルアクセスの無いサーバ処理のキャラクタセット
| character_set_database   | utf8  | ◎CREATE DATABASEのデフォルトキャラクタセット 
| character_set_results    | cp932  | ★返された結果を表示するキャラクタセット
| character_set_server     | utf8  | ◎CREATE TABLEのデフォルトキャラクタセット
| character_set_system     | utf8   | 
+--------------------------+--------+
6 rows in set (0.00 sec)
----------
 
★ クライアントプログラム起動時の --default-character-set が影響する
  mysql>SET NAMES cp932; で変更できる  
◎ MySQL起動時の --default-characterset が影響する
 
2)データベース自体は、キャラクターセット utf8 で作る
----------
mysql>CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8;
----------
 
3)テーブルを作る
3-1)itemテーブルの作成
----------
use sampledb;
create table item(
id integer not null unique,
name text not null,
price integer not null,
primary key(id));
----------
 
■参考サイト
http://www.iana.org/assignments/character-sets 
MySQL日本語処理完全解説
http://www.scs.co.jp/mysql/ 
+ タグ編集
  • タグ:
  • MySQL
  • Java
  • 文字コード
  • データベース
最終更新:2008年05月27日 22:25