# Java 连接 SQL Server 报错 TLS10 ## 问题描述 在使用 **Java 8** 连接 **SQL Server 2008** 或老版本时,出现报错: ``` The server selected protocol version TLS10 is not accepted by client preferences [TLS12] ``` **原因**: - SQL Server 2008 只支持 **TLS 1.0** - Java 8 默认禁用 TLS 1.0/1.1(从某个更新版本起) - 导致 SSL/TLS 握手失败 ------ ## 解决方案 ### 方法 1:修改 `java.security` 配置文件 1. 打开文件: ``` \jre\lib\security\java.security ``` 1. 找到以下行: ``` jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, 3DES_EDE_CBC, ... ``` 1. 删除 `TLSv1`、`TLSv1.1`,修改为: ``` jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \ DH keySize < 1024, EC keySize < 224, anon, NULL, \ include jdk.disabled.namedCurves ``` > ✅ 这样 JVM 启动后会允许 TLS 1.0,从而兼容 SQL Server 2008。 ------ ### 方法 2:在 JVM 启动参数中启用 TLS1.0(无需改文件) ``` -Djdk.tls.client.protocols=TLSv1,TLSv1.1,TLSv1.2 ``` **用法示例**: - IDEA VM options: ``` -Dfile.encoding=UTF-8 -Djdk.tls.client.protocols=TLSv1,TLSv1.1,TLSv1.2 ``` - 命令行启动: ``` java -Djdk.tls.client.protocols=TLSv1,TLSv1.1,TLSv1.2 -jar yourapp.jar ``` # Navicat 连接 SQL Server 常见报错及解决方案 针对 Navicat 连接 SQL Server 2008/2008 R2 时可能出现的不同错误,整理成“错误 → 原因 → 解决”对照表,方便快速定位。 | 错误信息 | 原因 | 解决方案 | | ------------------------------------------------------------ | ----------------------------------------- | ------------------------------------------------------------ | | `[08001] [ODBC Driver 17 for SQL Server] SQL Server Network Interfaces: Connection string is not valid [87]` | 驱动不兼容老版本 SQL Server,连接格式不对 | 用 **Native Client 10.0** 驱动,填写正确服务器、端口、账号、数据库 | | `[08001] [Microsoft][SQL Server Native Client 10.0] SQL Server 网络接口: 连接字符串无效 [87]` | 服务器不可达或连接格式错误 | 地址格式应 `192.168.1.100,1433`(逗号分隔),确保 TCP/IP 启用,端口开放 |