2

MySQL の Java アプリケーションで日本語の文字を挿入する際に問題があります。
この文字列「今日は」を挿入すると、この「???」が得られます。

私のテーブルとそのフィールドは UTF-8 を使用しています。PHPから同じ文字列を挿入している間は機能するため、テーブル構造が関与しているとは思いません。

CREATE TABLE `pool` (
  `id` int(8) NOT NULL AUTO_INCREMENT, 
  `message` varchar(160) COLLATE utf8_bin NOT NULL DEFAULT ''
  PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

接続のプールを管理するライブラリ「BoneCPConfig」を使用してデータベースに接続しています:

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

Properties props = new Properties();
props.setProperty("characterEncoding", "UTF-8");
props.setProperty("useUnicode", "true");

BoneCPConfig config = new BoneCPConfig(props);
config.setJdbcUrl("jdbc:mysql://" + MYSQL_HOST_NAME + "/" + MYSQL_BASE_NAME);
config.setMinConnectionsPerPartition(MIN_CONNEXION_PER_PARTITION); 
config.setPartitionCount(PARTITION_COUNT); 
config.setUsername(MYSQL_LOGIN);
config.setPassword(MYSQL_PASSWORD);

私はこのように挿入します:

String query = "INSERT INTO pool (message) VALUES(?) ";

PreparedStatement insertStatement = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
insertStatement.setString(1, "今日は");
insertStatement.execute();

私の問題は接続構成にあると思いますが、どうすればよいかわかりません:-/ アイデアはありますか?


編集 :

問題は解決しました。以下を参照してください

4

1 に答える 1

4

問題は、パラメーターで渡されたプロパティを使用しない lib BoneCP でした...私はそれを置き換えることによって:

Properties props = new Properties();
props.setProperty("characterEncoding", "UTF-8");
props.setProperty("useUnicode", "true");

BoneCPConfig config = new BoneCPConfig(props);
config.setJdbcUrl("jdbc:mysql://" + MYSQL_HOST_NAME + "/" + MYSQL_BASE_NAME);

と :

BoneCPConfig config = new BoneCPConfig();
config.setJdbcUrl("jdbc:mysql://" + MYSQL_HOST_NAME + "/" + MYSQL_BASE_NAME + "?user=" + MYSQL_LOGIN + "&password=" + MYSQL_PASSWORD + "&characterEncoding=utf-8");
于 2012-08-07T18:11:58.713 に答える