在连接数据库的时候我们都要写数据库配置文件(db.properties)
其中,最主要的就是Driver和url
我们一般写Driver和url,都是像这样
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
但是其实Driver和url还有更详细的写法
1.JDBC驱动的版本号以及名称问题
Driver的写法是和mysql-connector-java的版本有关
我们之前一直用的都是 mysql-connector-java 5的包
<!--mysql的驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
所有我们写的都是
com.mysql.jdbc.Driver
但是我们在 mysql-connector-java 6以上的版本时
com.mysql.cj.jdbc.Driver
不然有可能会导致连接数据库时会有错误
2.URL配置
正常的url是写成
jdbc.url=jdbc:mysql://localhost:3306/mybatis
但是在url后面最好要增加以下
jdbc.url=jdbc:mysql://localhost:3306/mybatis
?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
其中,useUnicode=true&characterEncoding=utf8
添加的作用是:指定字符的编码、解码格式。
例如:mysql数据库用的是gbk编码,而项目数据库用的是utf-8编码。这时候如果添加了
useUnicode=true&characterEncoding=UTF-8 ,那么作用有如下两个方面:
1.存数据时:
数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。
2.取数据时:
在从数据库中取数据的时候,数据库会先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端。
serverTimezone=Asia/Shanghai
表示的是时区为上海时间,也是东八区,也可以写成
serverTimezone=GMT%2B8
其中%2B表示的是+号,所有GMT%2B8即为GMT+8
表示的也是东八区,北京时间
如果时区没有设置好,可能会出现时差问题
在使用高版本的mysql的驱动jar包时,从mysql中查出的时候,时间可能都比数据库的时间多13小时,而且这些时间存到数据库的时间,有些是正确的时间,有时比正确时间少13小时,这样返回给前端的时间就不准确
useSSL=false
在测试sql语句的时候,发现会有如下警告,虽然不影响结果,但是这一串红色的警告就很烦
上面的警告的意思是:
警告:不建议在没有服务器身份验证的情况下建立SSL连接。根据MySQL 5.5.45+,如果没有设置显式选项,默认情况下必须建立5.6.26+和5.7.6+要求的SSL连接。您需要通过设置useSSL=false显式禁用SSL,或者设置useSSL=true并为服务器证书验证提供信任存储。
其原因就是需要指明是否进行SSL连接
如下就是添加useSSL=false
useSSL=false和true的区别:
SSL(Secure Sockets Layer 安全套接字协议),
在mysql进行连接的时候,如果mysql的版本是5.7之后的版本必须要加上useSSL=false,
mysql5.7以及之前的版本则不用进行添加useSSL=false,会默认为false,一般情况下都是使用useSSL=false,尤其是在将项目部署到linux上时,一定要使用useSSL=false!!!
useSSL=true是进行安全验证,一般通过证书或者令牌什么的,
useSSL=false就是通过账号密码进行连接,通常使用useSSL=false!!!