私はテーブルを持っています。
mysql> SELECT @@GLOBAL.sql_mode;
... 空を返します。
mysql> create table testtable ( name varbinary(5));
mysql> insert into testtable values('hellowhowareyoudsafafas');
Query OK, 1 row affected, 1 warning (0.00 sec)
データがテーブルに挿入されます。しかし、c3p0ComboPoolDataSource
を使用すると、例外が発生しますcom.mysql.jdbc.MysqlDataTruncation
。
MySQL 5.1 で MySQL の厳密モードを設定していなかったので、データがテーブルに格納されることを期待していました。c3p0 による自動切り捨てを許可するにはどうすればよいですか。
=====わかりましたが、もっときちんとした方法はありますか======
PreparedStatement ps1 = connection.prepareStatement("SELECT @@sql_mode");
ResultSet rs = ps1.executeQuery();
String originalSqlMode = "";
if(rs.next()) {
originalSqlMode = rs.getString(1);
System.out.println(originalSqlMode);
}
String newSqlMode = originalSqlMode.replace("STRICT_ALL_TABLES", "").replace("STRICT_TRANS_TABLES", "").replace(",,", ",");
ps1 = connection.prepareStatement("SET SESSION sql_mode=?");
ps1.setString(1, newSqlMode);
ps1.execute();
PreparedStatement ps2 = connection.prepareStatement("insert into testtable values (?)");
ps2.setString(1, "indianpeople");
ps2.execute();