- PR -

データベースに日本語登録で文字化け

1
投稿者投稿内容
and1
会議室デビュー日: 2007/05/27
投稿数: 13
投稿日時: 2007-06-24 21:15
こんにちは、いつもお世話になっております。
and1です。

「サーブレットで文字化け」
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=38835&forum=12&19
で質問の続きです。
もう一度、問題点を整理して質問し直したいと思います。

データベースの日本語文字データをブラウザに表示させることはできたのですが
データベースへ日本語文字を登録することができません。
どうすれば、文字化けせず日本語文字をDBに登録できるでしょうか?
ご回答よろしくお願いします。

●手順

@char_test.htmlで
"登録"ボタンを押下する。

Achar_test.classによって
DBに"あ"という文字列を登録する。

BDBにログインし、select文で"あ"が登録されているか確認

結果:"?"が登録されている。


ちなみにDBにおける文字コードの設定は以下のとおりです。
Server characterset: latin1
Db characterset: sjis
Client characterset: latin1
Conn. characterset: latin1

※DBへ直接日本語をinsertすることは可能です。

また、テキストファイルに変数testStrを
出力すると以下のようになりました。

コードa)---------------------------------------------------------
FileWriter fw = new FileWriter("kiroku.txt");
BufferedWriter bw = new BufferedWriter(osw);
String buff = testStr;
bw.write(buff);
bw.newLine();
bw.flush();
bw.close();
fw.close();

コードb)---------------------------------------------------------
FileOutputStream os = new FileOutputStream("kiroku.txt");
OutputStreamWriter osw = new OutputStreamWriter(os, "Shift_JIS");
BufferedWriter bw = new BufferedWriter(osw);
String buff = testStr;
bw.write(buff);
bw.newLine();
bw.flush();
bw.close();
osw.close();
os.close();

【出力結果】
コードa ?
コードb あ

●本番環境
OS:FreeBSD
データベース:MYSQL 4.1.18
TOMCAT:4.1.31

●テスト環境
OS:WindowsXP
データベース:MYSQL 4.1.21
TOMCAT:5.0.28

●コード(補足)

================test.jsp================

<%@ page contentType="text/html; charset=Shift_JIS"
pageEncoding="Shift_JIS" %>
<% request.setCharacterEncoding("Shift_JIS"); %>


<html>
<body>

”あ”をDBに登録<BR>
<form action="char_test" method="post" >
<input type="submit" value="登録">
</form>
</body>
</html>

================char_test.java================

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import javax.servlet.ServletContext;
import javax.servlet.RequestDispatcher;
import java.io.*;
import java.sql.*;
import java.util.*;

public class char_test extends HttpServlet
{

String testStr="あ";
testStr = new String(testStr.getBytes("8859_1"),"Shift_JIS");

Connection con = null;
Statement stmt = null;
Exception exception;

public void doPost( HttpServletRequest req,
HttpServletResponse res )
throws ServletException, IOException
{

try
{

Class.forName( "com.mysql.jdbc.Driver" );

String jdbcurl = "jdbc:mysql://localhost/DB名";

Properties props = new Properties();
props.put("user", "root");
props.put("password", "パスワード");
props.put("useUnicode", "true");
props.put("characterEncoding", "Shift_JIS");

con = DriverManager.getConnection( jdbcurl, props );

String sql="insert into test_tb(input_str) values('"+testStr+"')";

stmt = con.createStatement();
int kekka = stmt.executeUpdate(sql);

String target = "/test.jsp";
ServletContext context = getServletContext();
RequestDispatcher rd = context.getRequestDispatcher( target );
rd.forward( req, res );
}
catch(Exception e)
{
req.setAttribute( "msg", e );

String target = "/Error.jsp";
ServletContext context = getServletContext();
RequestDispatcher rd = context.getRequestDispatcher( target );
rd.forward( req, res );
}
}
}

朝日奈ありす
大ベテラン
会議室デビュー日: 2007/05/02
投稿数: 189
お住まい・勤務地: 最北の地
投稿日時: 2007-06-25 08:17
前回の教訓身になってない(汗
どの時点で文字化けしているか確認してください
文字化けはなぜ起きるか確認してください
この確認とソースを見比べれば答えはでます
1

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