- PR -

全角マイナス"−"がMySQL5のテーブルに登録できない現象について

1
投稿者投稿内容
taka
会議室デビュー日: 2006/04/14
投稿数: 9
投稿日時: 2006-04-17 14:30
MySQL:mysql-5.0.19-win32
JDBCドライバ:mysql-connector-java-3.1.12-bin.jar
OS:WindowsXP
を使っています。

以下の様なソースでJUnitのテストを実行すると、
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'jusho' at row 1
というメッセージが出て、エラーで終了し、
テーブルをみてみると対象レコードのjushoフィールドの値は変更されていませんでした。
SQL文の全角マイナス'−'をほかの'テスト'などの字に変更すると、正しく登録できることを確認しております。
何か原因がお分かりの方がおられましたら、
すみませんが、ご教示お願いしたいのですが。
よろしくお願いいたします。


//--------- tof
package test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

import junit.framework.TestCase;


public class UpdateTest extends TestCase {

private static final String driver = "com.mysql.jdbc.Driver";
private static final String url = "jdbc:mysql://localhost:3307/test?useUnicode=true&characterEncoding=MS932";
private static final String user = "root";
private static final String password = (パスワード);

public void testUpdate() throws Exception {

Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement();

String sql = "UPDATE sample SET jusho='−' WHERE id = 1";

stmt.execute(sql);
}

}
//---------- eof
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-17 15:26
全角マイナスが、2212 か FF0D かが問題ですかね?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
taka
会議室デビュー日: 2006/04/14
投稿数: 9
投稿日時: 2006-04-17 16:01
MySQL5のインストール先はソースの実行環境と同じマシン上(WindowsXP)なので、
'\u2212'か'\uFF0D'かの違いによる問題とは考えにくいのですが。。。
どうですかね。


/*
一応最初の投稿時以降に試してみたのは、以下の通りです。
MySQL5のコンフィグファイル(my.ini)で、文字コードを
default-character-set=sjis
となっていたところを
default-character-set=MS932
としてみましたが、結果は同じでした。
*/
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-04-17 17:23
まさか、単に使えないとか?
http://japan.nucleuscms.org/bb/viewtopic.php?t=889
taka
会議室デビュー日: 2006/04/14
投稿数: 9
投稿日時: 2006-04-17 18:10
DBViewerプラグインで、
[データーベース定義の編集]->[オプション]->[charSet]
にMS932を指定して、
テーブルに全角マイナスを登録してみると、
正常に登録できました。
ですので、全角マイナスが使えないという訳ではないようです。

DBViewerプラグインにはソースがついているので、
どのように処理しているかを追いかけてみようと思っています。
もしわかれば、また報告いたします。

ですが、もし私より先に原因もしくは回避策がお分かりの方がおられましたら、
どうぞご教示の方よろしくお願いいたします。
taka
会議室デビュー日: 2006/04/14
投稿数: 9
投稿日時: 2006-04-18 11:55
不具合の正確な原因はまだ不明ですが、
回避策がわかりましたので、報告いたします。


Update文を実行する直前で、
"SET names sjis"
という上記一文を実行すると、
無事に全角マイナス('\uff0d')がMySQL5のテーブルに
登録できたことを確認しました。

気にかけてくださっている方がおられましたら、
本当にありがとうございました。
taka
会議室デビュー日: 2006/04/14
投稿数: 9
投稿日時: 2006-04-19 11:03
以下のようにすると、set names sjisを実行しなくても、
全角マイナスが登録できたことを確認しました。
ご参考までに。

//------------------ tof
package test;

import java.io.StringReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.PreparedStatement;

import junit.framework.TestCase;


public class UpdateTest extends TestCase {

private static final String driverName = "com.mysql.jdbc.Driver";
private static final String url = "jdbc:mysql://localhost:3307/test?useUnicode=true&characterEncoding=MS932";
// private static final String url = "jdbc:mysql://localhost:3307/test";
private static final String user = "root";
private static final String password = (パスワード);

public void testUpdate() throws Exception {

Class.forName(driverName);
Connection conn = DriverManager.getConnection(url, user, password);

System.out.println("driver version=" + conn.getMetaData().getDriverVersion());

String sql = "UPDATE sample SET jusho = ? WHERE id = 1";

PreparedStatement pst = conn.prepareStatement(sql);

String str = "−";
StringReader reader = new StringReader(str);
pst.setCharacterStream(1, reader, str.length());

pst.executeUpdate();
}
}
//------------------ eof
1

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