- PR -

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

投稿者投稿内容
とろ
会議室デビュー日: 2008/07/04
投稿数: 12
投稿日時: 2008-07-08 19:02
引用:

トッポさんの書き込み (2008-07-08 17:17) より:
XPからコマンドプロンプトでMySQLの動いているLinuxへtelnet接続して
MySQLコマンドで確認してみましたが確かにうまく表示できませんでした。
確認はコマンドプロンプト上ではないといけませんか?

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



トッポ様

ご返信ありがとうございます。

なるほど、コマンドプロンプトで確認するのではなくて、出力画面で確認
するのですね、有難う御座います。私はまだ初心者のため、selectの戻り値
の表示のコードをどうすればいいのか全く分からないため、これから勉強
したいと思います。

また質問させて頂くかもしれませんが、その時はご返信頂ければ大変
ありがたいです。
99ri
大ベテラン
会議室デビュー日: 2006/09/09
投稿数: 129
投稿日時: 2008-07-09 06:34
引用:
私は初心者でして、16進数などの言葉は
わかりますが、99ri様のおっしゃっていることの理解ができません。



テーブルのカラムの内容を文字に変換しないで16進で表示することです
これによりデータが不正なのか表示で文字化けかを切り分けられます

操作
select HEX('あ');

inputテーブルのtitileが文字化けしているようなら
select HEX(titile) from input;

HEXの説明は下記参照
リファレンスマニュアル
MySQL 5.0 Reference Manual
 :: 11 Functions and Operators
 :: 11.4 String Functions

旧版日本語マニュアル
 MySQLSQL言語リファレンス
  SELECT 節と WHERE 節で使用する関数
   文字列関数

WEBアプリのボタン送信時のコードも記載したほうがいいと思われます
DB登録前の受信時は想定データであることを確認したのでしょうか?
とろ
会議室デビュー日: 2008/07/04
投稿数: 12
投稿日時: 2008-07-09 12:24
引用:

99riさんの書き込み (2008-07-09 06:34) より:
引用:
私は初心者でして、16進数などの言葉は
わかりますが、99ri様のおっしゃっていることの理解ができません。



テーブルのカラムの内容を文字に変換しないで16進で表示することです
これによりデータが不正なのか表示で文字化けかを切り分けられます

操作
select HEX('あ');

inputテーブルのtitileが文字化けしているようなら
select HEX(titile) from input;

HEXの説明は下記参照
リファレンスマニュアル
MySQL 5.0 Reference Manual
 :: 11 Functions and Operators
 :: 11.4 String Functions

旧版日本語マニュアル
 MySQLSQL言語リファレンス
  SELECT 節と WHERE 節で使用する関数
   文字列関数

WEBアプリのボタン送信時のコードも記載したほうがいいと思われます
DB登録前の受信時は想定データであることを確認したのでしょうか?




99ri様

ご返信ありがとうございます。

丁寧にご説明有難う御座います。さっそく、「あ」と入力した
titleカラムに対して、以下のコマンドを実行してみました。
select HEX(title) from input;

すると、| E38182 |と表示されました。E38182をgoogleで
検索してみたところ、どうやらUTF-8データは入力されているようです。



>WEBアプリのボタン送信時のコードも記載したほうがいいと思われます

下記のとおりです。

<%@page contentType="text/html; charset=utf-8"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>

<html>
<head>
<title>入力画面</title>
</head>
<BODY>
<table border="1">
<html:form action="/confirmAction">
<tr>
<th>タイトル</th>
<td><html:textarea property="title" /></td>
</tr>
<tr>
<th>動画URL</th>
<td><html:textarea property="movie_url" /></td>
</tr>
<tr>
<th>資料URL</th>
<td><html:textarea property="material_url" /></td>
</tr>
<tr>
<th>詳細説明</th>
<td><html:textarea property="explanation" /></td>
</tr>
<html:submit>入力</html:submit>
</html:form>
</table>
</BODY>
</html>


>DB登録前の受信時は想定データであることを確認したのでしょうか?

この一文の理解が出来ません。大変恐縮ではありますが、もう少し
詳しくご説明願えませんでしょうか?
99ri
大ベテラン
会議室デビュー日: 2006/09/09
投稿数: 129
投稿日時: 2008-07-10 06:55
引用:
>DB登録前の受信時は想定データであることを確認したのでしょうか?

この一文の理解が出来ません。大変恐縮ではありますが、もう少し
詳しくご説明願えませんでしょうか?


入力の「あ」がプログラム処理前に文字化けしていないかを確認するためです

「い」や「う」もhex()で内容を表示してみてください
「い」はE38184 ですがE381まで同じなので文字化けのパターンが「あ」と違うことが
きになりました

とろ
会議室デビュー日: 2008/07/04
投稿数: 12
投稿日時: 2008-07-11 01:53
引用:

99riさんの書き込み (2008-07-10 06:55) より:
引用:
>DB登録前の受信時は想定データであることを確認したのでしょうか?

この一文の理解が出来ません。大変恐縮ではありますが、もう少し
詳しくご説明願えませんでしょうか?


入力の「あ」がプログラム処理前に文字化けしていないかを確認するためです

「い」や「う」もhex()で内容を表示してみてください
「い」はE38184 ですがE381まで同じなので文字化けのパターンが「あ」と違うことが
きになりました





毎回返信有難う御座います。

申し訳ございません、提示するデータが間違っておりました。
正しくは下記のとおりです。

| 縺・ | 縺・ | 縺・ | 縺・ |



>「い」や「う」もhex()で内容を表示してみてください


はい、「い」と入力した movie_urlカラムに対して、以下のコマンドを実行してみました。
select HEX(movie_url) from input;

結果は
| E38184 |

でした。

同じく、「う」と入力した material_urlカラムに対して、以下のコマンドを実行してみました。
select HEX(material_url) from input;

結果は
| E38186 |

でした。



何かしらご助言頂ければ幸いです。どうぞ宜しくお願い致します。
99ri
大ベテラン
会議室デビュー日: 2006/09/09
投稿数: 129
投稿日時: 2008-07-14 06:31
mysqlでログイン後にクライアント側の文字コードを変更してください
SET NAMES 'cp932' または SET NAMES 'sjis'

参考
MySQL 5.0 Reference Manual
9.1.4. Connection Character Sets and Collations
とろ
会議室デビュー日: 2008/07/04
投稿数: 12
投稿日時: 2008-07-14 06:49
引用:

99riさんの書き込み (2008-07-14 06:31) より:
mysqlでログイン後にクライアント側の文字コードを変更してください
SET NAMES 'cp932' または SET NAMES 'sjis'

参考
MySQL 5.0 Reference Manual
9.1.4. Connection Character Sets and Collations



ありがとうございます!ちゃんと表示されました。今度は逆に疑問があがって
くるのですが、unixでもwindowsでもちゃんと表示されるようにあえてUTF-8に
すべてエンコードをそろえたのにもかかわらず、shift-jisにすると、ちゃんと
表示されるのはなぜなのでしょうか?

たびたびの質問の恐れ入りますが、ご返信いただければ幸いです。どうぞ宜しく
お願い致します。
99ri
大ベテラン
会議室デビュー日: 2006/09/09
投稿数: 129
投稿日時: 2008-07-15 06:56
文字の表示や入力はmysqlではなくOS側が行います
Windows日本語版(OS)はCP932がデフォルトです

フォントとchcpでOS側をUTF8にしても正しく表示されなかったので
mysql側のほうでOS側の文字コードにあわせるようにしたということです

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