По какой-то странной причине я не могу добавить данные UTF-8 в свою базу данных MySQL.Когда я ввожу нелатинский символ, он сохраняется как ?????.Все остальное хранится нормально.Так, например, «это пример® ™» хранится нормально, но «和 英 辞典» хранится как «????».
URL-адрес соединения в порядке:
private DataSource getDB() throws PropertyVetoException {
ComboPooledDataSource db = new ComboPooledDataSource();
db.setDriverClass("com.mysql.jdbc.Driver");
db.setJdbcUrl("jdbc:mysql://domain.com:3306/db?useUnicode=true&characterEncoding=UTF-8");
db.setUser("...");
db.setPassword("...");
return db;
}
Я использую PreparedStatement, как и следовало ожидать, я даже попытался ввести «set names utf8», как кто-то предложил.
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
conn = db.getConnection();
stmt = conn.prepareStatement("set names utf8");
stmt.execute();
stmt = conn.prepareStatement("set character set utf8");
stmt.execute();
... set title...
stmt = conn.prepareStatement("INSERT INTO Table (title) VALUES (?)");
stmt.setString(1,title);
stmt.execute();
} catch (final SQLException e) {
...
С самой таблицей все в порядке.
Default Character Set: utf8
Default Collation: utf8_general_ci
...
Field title:
Type text
Character Set: utf8
Collation: utf8_unicode_ci
Я проверил это, введя Unicode (в частности, "和 英 辞典") через графический редактор, а затем выбрав из таблицы - и он был возвращен просто отлично.Так что это похоже на проблему с JDBC.
Что мне не хватает?