- PR -

MYSQL5.0、struts;1.29で文字化け

投稿者投稿内容
とろ
会議室デビュー日: 2008/07/04
投稿数: 12
投稿日時: 2008-07-04 15:44
初めて。とろと申します。

MYSQLでの文字化けについて質問させて頂きます。

現在、struts1.29でWEBアプリを作っています。
JSPで入力画面を作り、入力して送信ボタンを押すと、入力した
内容がデータベースに反映されるようになっています。そこまでは
いいのですが、データベースに反映された内容が文字化けして
しまっています。

考えられる対策はすべてしようと思い、以下の対策をしました。

1 filter

web.xmlに以下の記述をしました。
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<filter>
<filter-name>EncodeFilter</filter-name>
<filter-class>SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


<servlet>
(以下略)

2 MYSQL側のエンコーディング設定

MYSQL側のエンコーディング設定を色々といじって、下記のような
状態にしました。

mysql> show variables like "char%";
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:\\Program Files\\MySQL\\MySQL Server 5.0\\share\\charsets\\ |
+--------------------------+---------------------------------------------------------+

mysql> status;
--------------
mysql Ver 14.12 Distrib 5.0.27, for Win32 (ia32)

Connection id: 1
Current database: input
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server version: 5.0.27-community-nt
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
TCP port: 3306
Uptime: 4 hours 59 min 41 sec

mysql> show create database input;
+----------+----------------------------------------------------------------+
| Database | Create Database |
+----------+----------------------------------------------------------------+
| input | CREATE DATABASE `input` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+----------------------------------------------------------------+

mysql> show create table input;
+-------+-------------------------------
----------------------------------------
| Table | Create Table

+-------+-------------------------------
----------------------------------------
| input | CREATE TABLE `input` (
`id` int(11) NOT NULL auto_increment,
`title` text,
`movie_url` text,
`material_url` text,
`explanation` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------

考えられる対策はすべてしても、なお文字化けしています。なお、
「あ」「い」「う」「え」とそれぞれの項目に入力すると以下の
ようになります。

| 縺・ | 繧」 | 繧ヲ | 蠕・ |

どんなことでも結構ですので、ご教授いただければ幸いです。
どうぞよろしくお願いいたします。

開発環境
OS;WINDOWS VISTA SP1
IDE;ECLIPSE 3.32
DB;MYSQL5.0
JRE;jre1.6.0_06
struts;1.29
99ri
大ベテラン
会議室デビュー日: 2006/09/09
投稿数: 129
投稿日時: 2008-07-08 06:57
テーブルの内容を16進で表示してみてください
HEX('あ') と HEX(カラム)

「い」「う」「え」はUTF-8をSJISとした場合に提示された内容にはなりませんが
UTF-8の3バイトを2バイトと1バイトにしているように思います
とろ
会議室デビュー日: 2008/07/04
投稿数: 12
投稿日時: 2008-07-08 09:44
99ri様

投稿ありがとうございます。

誠に申し訳ないのですが、私は初心者でして、16進数などの言葉は
わかりますが、99ri様のおっしゃっていることの理解ができません。
もう少し詳しく教えて頂けない
でしょうか?

恐れ入りますが、どうぞよろしくお願いいたします。
ことぶきじーさん
会議室デビュー日: 2003/10/07
投稿数: 7
お住まい・勤務地: 東京23区内
投稿日時: 2008-07-08 10:09
実はちゃんと更新されているとか。
確認に使っているteratermとかがUTF-8になってないということはないでしょうか?
とろ
会議室デビュー日: 2008/07/04
投稿数: 12
投稿日時: 2008-07-08 12:37
引用:

ことぶきじーさんさんの書き込み (2008-07-08 10:09) より:
実はちゃんと更新されているとか。
確認に使っているteratermとかがUTF-8になってないということはないでしょうか?




ことぶきじーさん様

投稿ありがとうございます。確認に使っているのはコマンドプロンプトです。
コマンドプロンプトでmysql -u root -pでパスワードを入れてmysqlに入り、
あとはデータベースを選択してselect * fromで項目を表示させています。
トッポ
会議室デビュー日: 2004/05/28
投稿数: 16
投稿日時: 2008-07-08 14:21
引用:

とろさんの書き込み (2008-07-08 12:37) より:
投稿ありがとうございます。確認に使っているのはコマンドプロンプトです。
コマンドプロンプトでmysql -u root -pでパスワードを入れてmysqlに入り、
あとはデータベースを選択してselect * fromで項目を表示させています。



コマンドプロンプトはデフォルトShift-JISで表示されます。
UTF-8を表示させるには設定変更が必要です。
つ http://d.hatena.ne.jp/perlcodesample/20080706/1215291523
とろ
会議室デビュー日: 2008/07/04
投稿数: 12
投稿日時: 2008-07-08 16:07
引用:

トッポさんの書き込み (2008-07-08 14:21) より:
引用:

とろさんの書き込み (2008-07-08 12:37) より:
投稿ありがとうございます。確認に使っているのはコマンドプロンプトです。
コマンドプロンプトでmysql -u root -pでパスワードを入れてmysqlに入り、
あとはデータベースを選択してselect * fromで項目を表示させています。



コマンドプロンプトはデフォルトShift-JISで表示されます。
UTF-8を表示させるには設定変更が必要です。
つ http://d.hatena.ne.jp/perlcodesample/20080706/1215291523



トッポ様

投稿ありがとうございます。さっそく試してみたところ、以下のように文字化け
してしまいました。
| &atilde;&#129;&#8218; | &atilde;&#8218;&pound; | &atilde;&#8218;&brvbar; | &aring;&frac34;&#8212; |

元々、「あ」「い」「う」「え」とそれぞれの項目に入力すると
以下のように文字化けしていました。

| 縺・ | 繧」 | 繧ヲ | 蠕・ |


ますますわからなくなってきました。何かご返信いただければ幸いです。
トッポ
会議室デビュー日: 2004/05/28
投稿数: 16
投稿日時: 2008-07-08 17:17
XPからコマンドプロンプトでMySQLの動いているLinuxへtelnet接続して
MySQLコマンドで確認してみましたが確かにうまく表示できませんでした。
確認はコマンドプロンプト上ではないといけませんか?

出力画面を作った方が早そうな気が ^^;
# selectの戻り値を表示させるだけだし

スキルアップ/キャリアアップ(JOB@IT)