Я использую Java и класс Spring JdbcTemplate для создания SQL-запроса в Java, который запрашивает базу данных Postgres. Однако у меня возникают проблемы при выполнении запросов, которые содержат иностранные / акцентированные символы.
Например (обрезанный) код:
JdbcTemplate select = new JdbcTemplate( postgresDatabase );
String query = "SELECT id FROM province WHERE name = 'Ontario';";
Integer id = select.queryForObject( query, Integer.class );
будет извлекать идентификатор провинции, но если вместо этого я сделал name = 'Québec'
, тогда запрос не вернет никаких результатов (это значение находится в базе данных, поэтому проблема не в том, что он отсутствует).
Я полагаю, что источником проблемы является то, что база данных, которую я должен использовать, имеет установленную по умолчанию кодировку клиента SQL_ASCII, что в соответствии с это предотвращает автоматические преобразования набора символов. (Кодировка среды Java установлена на «UTF-8», хотя мне сказали, что база данных использует «LATIN1» / «ISO-8859-1»)
Мне удалось вручную указать кодировку, когда наборы результатов содержали значения с иностранными символами в качестве решения предыдущей проблемы с аналогичной природой.
Ex:
String provinceName = new String ( resultSet.getBytes( "name" ), "ISO-8859-1" );
Но теперь, когда иностранные символы являются частью самого запроса, этот подход не увенчался успехом. (Я полагаю, поскольку запрос должен быть сохранен в String, прежде чем он все равно будет выполнен, разбив его на байты и затем изменив кодировку, только запутав символы).
Есть ли способ обойти это без необходимости изменять свойства базы данных или реконструировать ее?
PostScript: я обнаружил эту функцию в StackOverflow при создании заголовка, он, похоже, не работал (возможно, я не использовал его правильно, но даже если он работал, это не похоже как будто это может быть лучшим решением.):
Edit: я выбрал свой собственный ответ для этого, так как это будет то, что я использую сейчас; однако, как упоминалось в комментарии ниже, я был бы рад рассмотреть другие предложения, которые могут быть лучше, если у меня есть доступ к базе данных.