如何通过JDBC驱动连接名称含重音字符的SQL Server?
解决方案
问题根源:useUnicode、characterEncoding两个参数仅作用于JDBC和SQL Server交互阶段的字符集处理,不影响主机名解析环节的编码逻辑,你遇到的乱码是Java底层解析带重音的主机名时,默认使用了非UTF-8编码导致的。
可按以下优先级排查解决:
- 方案1(最简便,无需修改服务端和启动参数):修改本地hosts文件做别名映射
- 用管理员权限打开Windows系统的hosts文件,路径为
C:\Windows\System32\drivers\etc\hosts - 新增一行配置:
127.0.0.1 sql-local(别名可自定义,不要带特殊字符即可) - 修改
application.properties中的JDBC URL,把FLÉK替换为你自定义的别名即可:spring.datasource.url=jdbc:sqlserver://sql-local\MSSQLSERVER02;databasename=MyDatabase;integratedSecurity=true;
- 用管理员权限打开Windows系统的hosts文件,路径为
- 方案2:给Java应用添加JVM编码参数
启动应用时添加两个VM参数,指定系统层面解析字符用UTF-8:
如果是IDEA本地启动,可在对应运行配置的「VM options」栏填写上述参数;如果是jar包部署,启动命令修改为:-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8java -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -jar 你的应用包名.jar - 方案3:直接用IP替代主机名
因为是本地部署的SQL Server,直接把主机名替换为127.0.0.1即可完全避开主机名编码解析问题:spring.datasource.url=jdbc:sqlserver://127.0.0.1\MSSQLSERVER02;databasename=MyDatabase;integratedSecurity=true;
注意:如果使用Windows身份验证,需确保对应版本的
sqljdbc_auth.dll已经放在JDK的bin目录或者系统PATH路径下,避免后续出现身份验证相关报错。
内容的提问来源于stack exchange,提问作者Lois2B
相关产品推荐
相关产品推荐

