• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

数据库的url参数解释说明

武飞扬头像
小渣渣学java
帮助1

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: root

上面的URL中的各项参数代表的含义分别是什么呢?

首先了解URL

url格式-百度百科
URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。
也可认为由四部分组成:协议、主机、端口、路径
URL的一般语法格式为:
(带方括号[ ]的为可选项)
protocol : // hostname[:port] / path / [:parameters][?query]#fragment

protocol(协议)
指定使用的传输协议, 最常用的是HTTP协议,它也是WWW中应用最广的协议。
http 通过 HTTP 访问该资源。 格式 HTTP://
https 通过安全的 HTTPS 访问该资源。 格式 HTTPS://

各参数含义

1、url: 统一资源定位符

2、jdbc:mysql 是协议名称 是指JDBC连接方式

3、localhost:3306 是主机:端口 还可以写作127.0.0.1:3306

4、test 是数据库名

5、useSSL: MySQL在高版本需要指明是否进行SSL连接 在mysql连接字符串url中加入ssl=true或者false即可 SSL

6、useUnicode: 是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true

7、characterEncoding: 当useUnicode设置为true,给定编码,常用utf8,默认是:autodetect

我们在连接mysql数据库的时候一般都会在url后面添加useUnicode=true&characterEncoding=UTF-8 ,但是问什么要添加呢?

添加的作用是:指定字符的编码、解码格式。
例如:mysql数据库用的是gbk编码,而项目数据库用的是utf-8编码。这时候如果添加了useUnicode=true&characterEncoding=UTF-8 ,那么作用有如下两个方面:
a、存数据时:
数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。
b、取数据时:
在从数据库中取数据的时候,数据库会先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端。

8、serverTimezone: 设置时区 例如 serverTimezone=UTC(统一标准世界时间)或serverTimezone=Asia/Shanghai(中国时区)

9、zeroDateTimeBehavior=convertToNull

在查询 Mysql 数据库的时候,有时候会产生一个异常:
java.sql.SQLException: Value ‘0000-00-00 00:00:00’ can not be represented as java.sql.Timestamp
翻译为: 值“0000-00-00 00:00:00”不能表示为java.sql.Timestamp。
Datetimes with all-zero components (0000-00-00 …): These values cannot be represented reliably in Java. Connector/J 3.0.x always converted them to NULL when being read from a ResultSet.
翻译为:所有零组件的日期时间(0000-00-00…):这些值在Java中无法可靠地表示。当从结果集读取时,连接器/J 3.0.x总是将它们转换为NULL。
关键在于在 Mysql 里 0000-00-00 00:00:00 可能是有效的;而在 Java 中,这样的转换是无效的。
因此,Mysql JDBC 驱动将抛出一个 java.sql.SQLException ,因为 Java 不能识别 0000-00-00 00:00:00 这样的日期格式。
举个实际的栗子,你的方法中要传入来自页面的日期参数值 ,按照正常的做法,比如日期值为2016-10-11,但是由于误操作,传入了0000-00-00,并没有设置正确的数据,那么这时默认抛出java.sql.SQLException异常
(如果设定这一项 zero datetime behavior (英文字面意思为“0datetime反应”)=
convert to null(英文字面意思为“转化为null”),把日期转换为null代替异常处理):
即这类操作情况的处理策略,有3种
1.exception(不指定,则默认)---->默认抛出异常,
2.convertToNull------->转化为null
3.round------->替换成最近的日期即XXXX-01-01
这个在指定管理的数据库连接属性文件(jdbc.properties )jdbc 的URL常用到。

10、allowPublicKeyRetrieval=true
设置AllowPublicKeyRetrieval=True参数以允许客户端从服务器获取公钥。
AllowPublicKeyRetrieval=True可能会导致恶意的代理通过中间人攻击(MITM)获取到明文密码,所以默认是关闭的,必须显式开启。
问题一
当使用数据库查询第一条数据的时候,发现报了这个Public Key Retrieval is not allowed(不允许检索公钥)。出现这个问题原因是:mysql8以上版本默认使用 sha256_password 认证,密码在传输过程中必须加密保护,如果无法使用 TLS,就需要使用 RSA 公钥加密。

解决办法:设置AllowPublicKeyRetrieval=True即可解决此问题。

问题二
Access denied for user ‘root’@‘172.17.0.1’ (using password: YES)
此异常和问题一个一个地样,从MySQL8.0 开始,默认的验证方式是caching_sha2_password

解决办法:
使用指令mysql -u root -p指令进入mysql,将验证方式修改为“mysql_native_password”

USE mysql; 
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
//密码123456改成自己的

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgghfee
系列文章
更多 icon
同类精品
更多 icon
继续加载