Не удается сохранить содержимое UTF-8 в MySQL с помощью Java PreparedStatement

По какой-то странной причине я не могу добавить данные 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.

Чего мне не хватает?

5
задан nostromo 8 March 2012 в 22:08
поделиться