码迷,mamicode.com
首页 > 数据库 > 详细

JDBC中在配置数据源url中部分参数解析

时间:2020-01-09 00:38:59      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:解决   style   日期转换   ESS   出现   bugs   cto   作用   c中   

url: jdbc:mysql://localhost:3306/mydb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false

1. serverTimezone 关于时区的设置

  常见问题:从数据库返回的时间比真正保存的时间提前8小时。

  解决:将 serverTimezone=UTC  改为 serverTimezone=Asia/Shanghai 

2.useUnicode和characterEncoding  添加的作用是:指定字符的编码、解码格式。

            例如:mysql数据库用的是gbk编码,而项目数据库用的是utf-8编码。这时候如果添加了useUnicode=true&characterEncoding=UTF-8 ,那么作用有如下两个方面:

  2.1 存数据时:

      数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。

  2.2 取数据时:

      在从数据库中取数据的时候,数据库会先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端。

 

3.zeroDateTimeBehavior

  JAVA连接MySQL数据库,在操作值为0的timestamp类型时不能正确的处理,而是默认抛出一个异常,就是所见的:java.sql.SQLException: Cannot convert value ‘0000-00-00 00:00:00‘ from column 7 to TIMESTAMP。这一问题在官方文档中有详细说明,详见如下链接:

http://bugs.mysql.com/bug.php?id=19274

http://dev.mysql.com/doc/refman/5.5/en/connector-j-installing-upgrading.html

 

在JDBC连接串中有一项属性:zeroDateTimeBehavior,可以用来配置出现这种情况时的处理策略,该属性有下列三个属性值:

exception:默认值,即抛出SQL state [S1009]. Cannot convert value....的异常;

convertToNull:将日期转换成NULL值;

round:替换成最近的日期即0001-01-01;

 

因此对于这类异常,可以考虑通过修改连接串,附加zeroDateTimeBehavior=convertToNull属性的方式予以规避,例如:

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

 

   从另一个层面讲,这类异常的触发也与timestamp赋值的操作有关,如果能够在设计阶段和记录写入阶段做好逻辑判断,避免写入 ‘0000-00-00 00:00:00‘这类值,那么也可以避免出现 Cannot convert value ‘0000-00-00 00:00:00‘ from column N to TIMESTAMP的错 误。

4.useSSL 

是否允许SSL连接

JDBC中在配置数据源url中部分参数解析

标签:解决   style   日期转换   ESS   出现   bugs   cto   作用   c中   

原文地址:https://www.cnblogs.com/vegetableDD/p/12169195.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!