В настоящее время я запускаю символы UTF-8 в некоторых таблицах большой базы данных. Эти таблицы уже имеют тип NVARCHAR MS-SQL. Кроме того, у меня есть несколько полей, в которых используется VARCHAR.
Существует известная проблема с взаимодействием Hibernate с драйвером JDBC (см., например, Сопоставление с varchar и nvarchar в спящем режиме). Короче говоря, Hibernate/JDBC генерирует SQL, который передает все строки как Unicode, независимо от типа SQL. Когда поле не-unicode (varchar) в базе данных сравнивается с входной строкой Unicode, знаки для этого столбца не соответствуют кодировке, поэтому выполняется полное сканирование таблицы. В драйвере JDBC (как версии JTDS, так и MS) есть параметр для передачи строк Unicode в виде ASCII, но это все или ничего, что запрещает ввод международных символов в базу данных.
Большинство сообщений, которые я видел по этой проблеме, придумали одно из двух решений: 1) изменить все в базе данных на NVARCHAR или 2) установить sendStringParametersAsUnicode = false, Тогда мой вопрос заключается в том, есть ли какое-нибудь известное решение для того, чтобы VARCHAR и NVARCHAR играли хорошо вместе? Это проблема огромная для моей среды, чтобы изменить все на NVARCHAR из-за зависимостей нисходящего потока и других внешних проблем.