#java #sql-server #jdbc
Вопрос:
Я пытался подключить приложение Spring Boot к своему локальному SQL-серверу, но, поскольку имя сервера содержит символ с ударением (а именно É
), протокол подключения, похоже, этого не позволяет.
Я попытался указать свойства useUnicode
и characterEncoding
, но до сих пор ничего не работало.
Вот application.properties
файл:
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
#connection using Windows Authentication
spring.datasource.url=jdbc:sqlserver://FLÉK\MSSQLSERVER02;databasename=MyDatabase;integratedSecurity=true;useUnicode=true;characterEncoding=UTF-8
spring.datasource.username=usname
spring.datasource.password=somepassword
И сообщение об ошибке:
com.microsoft.sqlserver.jdbc.SQLServerException: The connection to the host FL�K, named instance mssqlserver02 failed. Error: "java.net.UnknownHostException: FL�K". Verify the server and instance names and check that no firewall is blocking UDP traffic to port 1434. For SQL Server 2005 or later, verify that the SQL Server Browser Service is running on the host.
Я не могу изменить имя сервера, так как для этого потребуется переустановка самого сервера. Есть идеи, на каком уровне мне следует искать решение или где я должен включить это использование юникода?
Комментарии:
1. Измените источник данных spring.datasource. значение URL-адреса программно. Создайте его с помощью Java, а затем сохраните.
2. Если у сервера есть фиксированный IP-адрес, вы можете использовать его
3. Вы пробовали использовать
u00C9
в файле? Вероятно, вы сохранили свой.properties
файл как UTF-8. в то время как он загружен как ISO-8859-1 (который используется по умолчанию.properties
с Java 1.0).4. Спасибо всем, я перепробовал все свойства, упомянутые выше. @ChrisMaggiulli, к сожалению, ни один из них не сработал, но @MarkRotteveel ваш подход сработал, я не знал, что
.properties
для чтения использовалась кодировка ISO-8859-1. Пожалуйста, сделайте это ответом, чтобы я мог проголосовать и принять его.5. Рад, что все разрешилось
Ответ №1:
.properties
По умолчанию ожидается, что файл Java будет иметь набор символов ISO — 8859 — 1, но похоже, что вы сохранили его как UTF-8. Видеть Properties.load(InputStream)
:
Считывает список свойств (пары ключей и элементов) из входного байтового потока. Входной поток представлен в простом линейно-ориентированном формате, как указано в
load(Reader)
, и предполагается, что он использует кодировку символов ISO 8859-1; то есть каждый байт представляет собой один символ Latin1. Символы, не написанные на латинице 1, и некоторые специальные символы представлены в ключах и элементах с использованием экранирования в Юникоде, как определено в разделе 3.3 Спецификации языка Java™.
У вас есть два варианта в Java в целом:
- Явно сохраните в ISO-8859-1. Это очень хрупкий подход, так как для повторного представления проблемы требуется только редактор, который автоматически «исправляет» вещи и сохраняет их в формате UTF-8
- В этом случае используйте экранирование в Юникоде для символов, выходящих за пределы диапазона ASCII
u00c9
.
В частности, для весны у вас есть третий вариант
- Переключитесь на использование файлов конфигурации YAML, которые по умолчанию являются UTF-8.
Для Java в целом, но не для свойств приложения Spring, у вас также есть возможность загрузить файл свойств с использованием Properties.load(Reader)
, где средство чтения было построено с правильным набором символов файла.