数据库连接url参数解释

260 阅读4分钟

前言​

今天操作数据库时发现了一个bug,上网搜索了一下解决了,就想着总结一下,bug放在文章的最后面。 文章如果有错误或者不规范的地方请指出来,一起加油,感谢大家观看!!!

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
      username: root
      password: 123456

在数据库连接中,URL(Uniform Resource Locator,统一资源定位符)参数起着关键作用。以下是对数据库 URL 参数的解释说明:


一、通用结构

数据库连接 URL 通常具有特定的格式,以 JDBC(Java Database Connectivity)连接 MySQL 数据库为例,格式一般为:

jdbc:mysql://[host][:port]/[database][?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]...

二、各部分含义

1.jdbc:mysql://:

这是 JDBC 连接 MySQL 数据库的前缀标识,表明使用 JDBC 连接 MySQL 数据库驱动程序。

2.[host]:

数据库服务器的主机名或 IP 地址。指定数据库服务器所在的位置,例如 “localhost” 表示本地主机,或者是一个具体的 IP 地址如 “192.168.1.100”。

3.[:port]:

可选参数,数据库服务器的端口号。MySQL 的默认端口号是 3306,但如果数据库服务器配置为使用不同的端口,则需要在 URL 中指定正确的端口号。

4.[database]:

要连接的数据库名称。指定要连接和操作的具体数据库。

5.[?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]...:

常用连接参数:

allowPublicKeyRetrieval=true|false:

含义:决定是否允许客户端从服务器自动检索公钥。如果设置为true,则允许检索公钥,这在某些情况下可以解决连接问题,但可能会带来一定的安全风险。如果设置为false,则不允许检索公钥。

示例:jdbc:mysql://localhost:3306/mydb?allowPublicKeyRetrieval=true

useSSL=true|false:

含义:指定是否使用 SSL(Secure Sockets Layer)加密连接。设置为true表示使用 SSL 加密连接,确保数据在传输过程中的安全性;设置为false表示不使用 SSL 连接。

示例:jdbc:mysql://localhost:3306/mydb?useSSL=false

characterEncoding=[encoding]:

含义:设置连接的字符编码。常见的编码有UTF-8、GBK等。确保客户端和服务器之间的数据传输使用正确的字符编码,以避免出现乱码问题。

示例:jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8

autoReconnect=true|false:

含义:当连接断开时,决定是否自动重新连接。如果设置为true,在连接断开时,驱动程序会尝试自动重新连接到数据库;如果设置为false,则不会自动重新连接。

示例:jdbc:mysql://localhost:3306/mydb?autoReconnect=true

zeroDateTimeBehavior=[behavior]:

含义:指定当数据库返回零日期时间值时的处理方式。常见的行为有exception(抛出异常)、convertToNull(转换为 null)等。

示例:jdbc:mysql://localhost:3306/mydb?zeroDateTimeBehavior=convertToNull

二、其他可能的参数

serverTimezone=[timezone]:

含义:设置服务器的时区。确保数据库中的日期时间值与客户端的时区一致,避免出现时间不一致的问题。

示例:jdbc:mysql://localhost:3306/mydb?serverTimezone=UTC

connectTimeout=[milliseconds]:

含义:指定连接超时时间,以毫秒为单位。如果在指定的时间内无法建立连接,则连接尝试将失败。

示例:jdbc:mysql://localhost:3306/mydb?connectTimeout=5000

socketTimeout=[milliseconds]:

含义:设置套接字超时时间,以毫秒为单位。指定在读取或写入数据库时等待的最长时间,如果超过这个时间仍未完成操作,则会抛出超时异常。

示例:jdbc:mysql://localhost:3306/mydb?socketTimeout=10000

这些连接参数和配置选项可以根据具体的应用需求进行调整,以实现最佳的数据库连接性能和稳定性。在使用时,需要根据实际情况进行合理的配置,同时也要注意安全性和性能的平衡。通过正确配置数据库连接 URL 的各个参数,可以成功建立与数据库的连接,并进行数据的存储、检索和操作等各种数据库操作。

三、java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed

先展示一下我之前的url

jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai

“Public Key Retrieval is not allowed” 错误原因及解决方法

原因分析: 这个错误通常是由于 MySQL 服务器配置不允许客户端自动检索服务器的公钥引起的。在某些情况下,MySQL 服务器可能会要求客户端显式地配置是否允许公钥检索,以提高安全性。

解决方法: 在连接字符串中添加allowPublicKeyRetrieval=true参数,例如:

jdbc:mysql://localhost:3306/mydb?allowPublicKeyRetrieval=true

确保你的数据库连接配置正确,并且你的 MySQL 服务器版本与 JDBC 驱动版本兼容。如果问题仍然存在,可以检查 MySQL 服务器的日志以获取更多详细信息。


如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

微信图片_20241011223609.jpg