- mso
- ぬし
- 会議室デビュー日: 2003/12/04
- 投稿数: 496
- お住まい・勤務地: 宮城
|
投稿日時: 2006-08-16 18:20
msoです。
環境:
WindowsXP SP2
TOMCAT5.0.28
Java 1.4
MySQL 4.1
お世話になります。
JSPの業務で、文字コードと思しきところで解決が難しいところに
ぶつかってしまいました。
何か解決策等、アドバイスをいただけたらと思い書き込みをしています。
まず、現象なのですがTOMCAT、Java、MySQL等については
無事インストールが出来ています。
次にMySQLへのCreate DatabaseとTOMCATと
設定を行いJSPでのテストプログラムを作成いたしました。
※1:MySQLのCreate Database
※2:JSPのソース
当初は何も問題が無かったと思っていたのですが、
テストをしていくうちに日本語が正しく表示されない
ことに気がつきました。
ただ、自分が理解できないのは
MySQL側 データはUTF-8
JSP側 すべてUTF-8で統一
としているのになぜ文字化けをするのでしょうか?
また、解決方法がはっきりとわかりません。
どのようにすれば良いのでしょうか?
大変申し訳ありませんが、アドバイスをお願いします。
MySQLのCreateDatabase文とデータの作りこみ
コード: |
|
※1
create database utf_test default character set utf8;
grant select on *.* to db_user identified by 'abcde';
flush privileges;
use utf_test
create table tbl_test (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL
);
source D:\project\JRA\jra-present\db\sql\create_table.sql
# ↑文字コードをUTF-8に変換してある
|
JSPソース
コード: |
|
※2
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@page contentType="text/html;charset=UTF-8" %>
<%
//パラメータを取得する
request.setCharacterEncoding("Windows-31J");
String strParam = request.getParameter("id");
if (strParam == null ) {
strParam = "";
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<HTML>
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<BODY>
<div align="center">
<form method="post" action="index.jsp">
TEST:<input type="text" name="id" value="<%= strParam %>"/><input type="submit" value="検索" />
<br />
<br />
<br />
<%
//パラメータの変数を作成
PreparedStatement pstmt = null;
Connection db = null;
ResultSet rs = null;
try {
//JDBCの変数作成
Class.forName("org.gjt.mm.mysql.Driver");
db=DriverManager.getConnection("jdbc:mysql://localhost/utf_test?user=db_user&password=abcde&useUnicode=true&characterEncoding=UTF-8");
db.setReadOnly(true);
//select文作成
String sql_str = "SELECT * FROM tbl_test where id = ?";
pstmt = db.prepareStatement(sql_str);
// パラメータを設定
pstmt.setString(1, strParam);
// select文を実行
rs = pstmt.executeQuery();
//ループを開始する
while(rs.next()){
//お名前
String strName = rs.getString("name");
%>
<table border="1" cellspacing="0">
<tr>
<td>ナマエ</td>
<td><%=strName%></td>
</tr>
</table>
<%
}
} finally {
//閉じる
rs.close();
db.close();
}
%>
</form>
</div>
</BODY>
</HTML>
|
|
- mso
- ぬし
- 会議室デビュー日: 2003/12/04
- 投稿数: 496
- お住まい・勤務地: 宮城
|
投稿日時: 2006-08-16 19:31
プログラムではなく、DBの設定を確認したところ
文字コードがラテンになっていたため、
文字化けをしていると判断しました。
そこで、my.iniを修正し、
コード: |
|
mysql> \s
--------------
D:\java\mysql\bin\mysql.exe Ver 14.7 Distrib 4.1.21, for Win32 (ia32)
Connection id: 1
Current database: utf_test
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server version: 4.1.21-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: 5 min 52 sec
|
に変更をしました。
ただ、このときにinsertで日本語をインサートしようとすると
失敗します。
DB EXPERTに行くのが筋であるのは、
わかるのですがこのままここで継続的に質問を
させてください。
よろしくお願いします。
|
- かつのり
- ぬし
- 会議室デビュー日: 2004/03/18
- 投稿数: 2015
- お住まい・勤務地: 札幌
|
投稿日時: 2006-08-17 00:58
最近MySQLを使い始めたのでそんなに詳しくないですが、
私はPHPでUTF-8を使用するために、
コネクション取得後に、SET NAMES utf8を実行しています。
それと、select * from information_schema.TABLESでテーブルの文字コードがわかります。
テーブルの文字コードだけラテンになってませんか?
|
- mso
- ぬし
- 会議室デビュー日: 2003/12/04
- 投稿数: 496
- お住まい・勤務地: 宮城
|
投稿日時: 2006-08-17 10:36
msoです。
かつのりさん、コメントありがとうございます。
>それと、select * from information_schema.TABLESでテーブルの文字コードがわかります。
>テーブルの文字コードだけラテンになってませんか?
ですが、実行したところエラーになりました。
どうしたらいいのでしょうか?
えっと、あとmy.iniを
default-character-set=utf8
に変更して、MySQLを再起動したら、文字化けと思っていたことが
なおりました。
どうも、かつのりさんのご指摘どおりラテンで登録をしていたようです。
ありがとうございました。
|