- - PR -
全角マイナス"−"がMySQL5のテーブルに登録できない現象について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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 |
|
投稿日時: 2006-04-17 15:26
全角マイナスが、2212 か FF0D かが問題ですかね?
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
|
投稿日時: 2006-04-17 16:01
MySQL5のインストール先はソースの実行環境と同じマシン上(WindowsXP)なので、
'\u2212'か'\uFF0D'かの違いによる問題とは考えにくいのですが。。。 どうですかね。 /* 一応最初の投稿時以降に試してみたのは、以下の通りです。 MySQL5のコンフィグファイル(my.ini)で、文字コードを default-character-set=sjis となっていたところを default-character-set=MS932 としてみましたが、結果は同じでした。 */ |
|
投稿日時: 2006-04-17 17:23
まさか、単に使えないとか?
http://japan.nucleuscms.org/bb/viewtopic.php?t=889 |
|
投稿日時: 2006-04-17 18:10
DBViewerプラグインで、
[データーベース定義の編集]->[オプション]->[charSet] にMS932を指定して、 テーブルに全角マイナスを登録してみると、 正常に登録できました。 ですので、全角マイナスが使えないという訳ではないようです。 DBViewerプラグインにはソースがついているので、 どのように処理しているかを追いかけてみようと思っています。 もしわかれば、また報告いたします。 ですが、もし私より先に原因もしくは回避策がお分かりの方がおられましたら、 どうぞご教示の方よろしくお願いいたします。 |
|
投稿日時: 2006-04-18 11:55
不具合の正確な原因はまだ不明ですが、
回避策がわかりましたので、報告いたします。 Update文を実行する直前で、 "SET names sjis" という上記一文を実行すると、 無事に全角マイナス('\uff0d')がMySQL5のテーブルに 登録できたことを確認しました。 気にかけてくださっている方がおられましたら、 本当にありがとうございました。 |
|
投稿日時: 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