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

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连接

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

时间: 2024-11-06 07:32:14

JDBC中在配置数据源url中部分参数解析的相关文章

Python3 url解码与参数解析

在获取zk节点时,有些子节点名字直接就是编码后的url,就像下面这行一样: url='dubbo%3A%2F%2F10.4.5.3%3A20880%2Fcom.welab.authority.service.AuthorityService%3Fanyhost%3Dtrue%26application%3Dwelab-authority%26dubbo%3D2.5.7' 先需要把这个url里进行解码, 转成如下这种: dubbo://10.4.5.3:20880/com.welab.author

thinkphp在wamp 配置去掉url中index.php方法

调试了好久,才发现把简单的事情搞复杂了. 其实原理很简单. 1.在配置文件中 'URL_MODEL'=>2, 设置为2. 2.在php.ini中 cgi.fix_pathinfo=1 去掉前面的注释 3.在Apache下conf配置文件中, LoadModule rewrite_module modules/mod_rewrite.so 去掉前面的注释 然后重启apache,即可. 尊重原创. 作者:新启科技

JDBC中的DriverManager.getConnection(url)中的参数url

MySQL数据库 String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicod e=true&characterEncoding=8859_1" //myDB为数据库名 Connection conn= DriverManager.getConnection(url); 原文地址:https://www.cnblogs.com/liyanghui/p/10987504

weblogic.xml 配置去除url中session

<session-descriptor> <url-rewriting-enabled>false</url-rewriting-enabled> </session-descriptor> 原文地址:https://www.cnblogs.com/molecule/p/9270038.html

Maven在Windows中的配置以及IDE中的项目创建

Maven在Windows下的配置 1.Maven下载地址:http://maven.apache.org/download.cgi,下载红框里的版本即可. 2.解压到D盘: 3.修改配置文件settings.xml. a)修改为阿里云的镜像,国内的镜像下载速度会快很多. <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://m

Android中访问网络时url中带有特殊字符的问题

Component Example value Also known as Protocol http scheme Authority username:[email protected]:8080   User Info username:password   Host host   Port 8080   File /directory/file?query   Path /directory/file   Query query   Ref ref fragment 一个完整的url链接

apache使用.htaccess文件中RewriteRule重定向后,URL中的加号无法解析

今天在使用.htaccess做伪静态的时候,发生一件怪事,URL里存在C++时会有问题,在处理C++这个词的时候,无论如何,$_GET都得不到++,只能得到C空格. 一开始我以为是没用urlencode处理,后来发现确确实实处理了,后台经过排查,确定是rewrite的问题,因为在单文件的环境是可以得到C++这个词的,当然,是经过了urlencode的. 原因:rewrite得不到c++这个词,是因为APACHE在得到参数后,自行做了urldecode处理,导致无法得到C++中的加号部分 决方案目

将url的查询参数解析成字典对象

1.先截取请求参数字符串: 2.使用decodeURIComponent函数进行解码: 3.正则匹配出参数对象: function getQueryObject(url) { url = url == null ? window.location.href : url; var search = url.substring(url.lastIndexOf("?") + 1); var obj = {}; var reg = /([^?&=]+)=([^?&=]*)/g;

mybatis学习(三)----优化Mybatis配置文件中的配置

一.把连接数据库的配置单独放在一个properties文件中 前面我们是把数据库的连接信息放在了mybatis-config.xml中,如下: 1 <?xml version="1.0" encoding="utf-8" ?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/myb