【问题标题】:How to connect to SQL Server with accent in name using JDBC driver?如何使用 JDBC 驱动程序连接到带有重音名称的 SQL Server?
【发布时间】:2021-09-28 19:55:34
【问题描述】:

我一直在尝试将 Spring Boot 应用程序连接到本地 SQL Server,但由于服务器名称包含重音字符(即 É),连接协议似乎不允许这样做。

我已尝试指定 useUnicodecharacterEncoding 属性,但到目前为止没有任何效果。

这是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.

我无法更改服务器名称,因为这需要重新安装服务器本身。任何想法我应该在什么级别寻找解决方案,或者我应该在哪里启用 unicode 的这种用法?

【问题讨论】:

  • 以编程方式更改 spring.datasource.url 值。用 Java 构建它,然后存储它。
  • 如果服务器有一个固定的IP地址,你可以使用它
  • 你试过在文件中使用\u00C9吗?您可能将 .properties 文件保存为 UTF-8。虽然它被加载为 ISO-8859-1(自 Java 1.0 以来一直是 .properties 的默认值)。
  • 谢谢大家,上面提到的所有属性我都试过了。 @ChrisMaggiulli 不幸的是,这些都不起作用,但是 @MarkRotteveel 你的方法确实有效,我不知道 .properties 使用 ISO-8859-1 编码进行阅读。请将此作为答案,以便我投票并接受它。
  • 很高兴解决了

标签: java sql-server jdbc


【解决方案1】:

Java .properties 文件默认为 ISO-8859-1 字符集,但看起来您保存为 UTF-8。见Properties.load(InputStream)

从输入字节中读取属性列表(键和元素对) 溪流。输入流采用简单的面向行的格式,如 在load(Reader) 中指定并假定使用 ISO 8859-1 字符编码;也就是说,每个字节都是一个 Latin1 字符。 非 Latin1 中的字符和某些特殊字符是 使用 Unicode 转义符在键和元素中表示,如 Java™ 语言规范的第 3.3 节。

在 Java 中一般有两种选择:

  1. 显式保存在 ISO-8859-1 中。这是一种非常脆弱的方法,因为它只需要一个编辑器自动“修复”事物并保存为 UTF-8 来重新引入问题
  2. 对 ASCII 范围之外的字符使用 Unicode 转义,在本例中为 \u00c9

特别是对于 Spring,您还有第三种选择

  1. 改用 YAML 配置文件,默认为 UTF-8。

对于一般的 Java,但不是 Spring 应用程序属性,您还可以选择使用 Properties.load(Reader) 加载属性文件,其中读取器是使用文件的正确字符集构建的。

【讨论】:

    猜你喜欢
    • 2011-06-05
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 2021-01-29
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    相关资源
    最近更新 更多