精华内容
下载资源
问答
  • mysql参数url的值需要这样设置: jdbc:mysql://localhost:3006/test?useUnicode=true&characterEncoding=UTF-8&...useLegacyDatetimeCode=false&serverTimezone=Asia/Hongkong...

    mysql参数url的值需要这样设置:

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

    参数解释:

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

    2、characterEncoding
    当useUnicode设置为true时,需要指定字符编码,比如可设置为gbk或者UTF-8

    3、useJDBCCompliantTimezoneShift
    中文含义是使用JDBC符合时区转换,但是根据4中的说法,我们不应该开启时区转换,不过好多地方都是设置的true,所以暂且搁置

    4、useLegacyDatetimeCode
    useLegacyDatetimeCode这个参数是一个开关参数,默认为true,但是当其设置为false时,useTimezone、useJDBCCompliantTimezoneShif、useGmtMillisForDatetimes、useFastDateParsing这几个参数都会变的无效化,其中useTimeZone(主要用于web服务器和数据库部署在不同时区时,开启服务器和客户端之间的时区转换,例如web服务器部署在北京(GMT+8),数据库部署在美国加州(GMT-8)。现在web服务器有一条记录的创建时间是所在当地时区时间22:00,那存储到数据库的时间却是数据库所在当地时区时间06:00。然后web服务器通过jdbc读取到这条记录后,读取到的创建时间应该仍旧是以当地时区为标准的22:00,而不是数据库所在失去的时间6:00,所以不能开启服务器和客户端之间的时区转换,因此需要让useTimeZone变得无效化)

    5、serverTimezone
    设置服务器端的时区,可以选择北京时间东八区——》GMT%2B8(其中GMT是格林威治时间,即世界时,%2B是+的意思,这是转义写法,不这样写会出错,GMT%2B8代表比世界时早8个小时,那代表北京时间) 或者 上海时间——》Asia/Shanghai,这样不会出现MySql数据库插入和读取的时间不正确的问题

    6、useSSL
    SSL协议提供服务的主要作用:
    1)认证用户服务器,确保数据发送到正确的服务器;    .
    2)加密数据,防止数据传输途中被窃取使用;
    3)维护数据完整性,验证数据在传输过程中是否丢失;
    结论:自己测试可以使用useSSL=false关闭SSL,生产环境需要开启SSL

    注意:在xml配置文件中,url中的&符号需要转义成&,例如上面的就变成了

    jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Hongkong&useSSL=false
    

    推荐网址:http://www.voidcn.com/article/p-eqvuhiio-bsb.html

    展开全文
  • useTimeZone是用来设置时区转换的,当其为true时,就会开启服务器和客户端之间的时区转换,而其只有当useLegacyDatetimeCode = true时才回生效 useLegacyDatetimeCode这个参数是一个开关参数,默认为true,但是当...

    今天程序中需要用到对数据库时间的获取,数据库在美国,用的是UTC时区,客户端在中国,用的时GMT+8时区,但是发现用getTime和getTimestamp时候获取日期时得到的时间不一致。于是就看了下JDBC的源码了解了这个Bug或者说Feature的原理。
    就是getTimestamp这个函数比如在数据库连接的url里面加入useTimezone = true这个参数才可以转换时区,否则传入的时区参数是无效的。然而getDate这个函数,是数据库连接的url里设置的时区对它都是无效的,需要再单独传入时区参数才可以

    #
    详细可以参考官方文档,比如Mysql的官方文档
    在数据库url中会有一些参数,其中关于时区的有如下三个:

    serverTimezone
    useTimeZone
    useLegacyDatetimeCode

    serverTimezone是用来服务器时区的【如果不设置就选择服务器的默认时区】
    useTimeZone是用来设置时区转换的,当其为true时,就会开启服务器和客户端之间的时区转换,而其只有当useLegacyDatetimeCode = true时才回生效

    useLegacyDatetimeCode这个参数是一个开关参数,默认为true,但是当其设置为false时,"useTimezone," "useJDBCCompliantTimezoneShift," "useGmtMillisForDatetimes," and "useFastDateParsing."这几个参数都会变的无效化。

    getTimestamp函数中,其中在最开始会传入一个时区的参数,

    public Timestamp getTimestamp(int columnIndex) throws SQLException {
          return this.getTimestampInternal(columnIndex, (Calendar)null, this.getDefaultTimeZone(), false);
      }
    
    private TimeZone getDefaultTimeZone() {
            return !this.useLegacyDatetimeCode && this.connection != null ? this.serverTimeZoneTz : this.connection.getDefaultTimeZone();
        }
    
    static final Timestamp fastTimestampCreate(TimeZone tz, int year, int month, int day, int hour, int minute, int seconds, int secondsPart) {
        Calendar cal = tz == null ? new GregorianCalendar() : new GregorianCalendar(tz);
        cal.clear();
        cal.set(year, month - 1, day, hour, minute, seconds);
        long tsAsMillis = 0L;
    
        try {
            tsAsMillis = cal.getTimeInMillis();
        } catch (IllegalAccessError var12) {
            tsAsMillis = cal.getTime().getTime();
        }
    
        Timestamp ts = new Timestamp(tsAsMillis);
        ts.setNanos(secondsPart);
        return ts;
    }

    Util.getDefaultTimeZone()

    public Date getDate(int columnIndex) throws SQLException {
            return this.getDate(columnIndex, (Calendar)null);
        }
    
        protected Date fastDateCreate(Calendar cal, int year, int month, int day) throws SQLException {
            synchronized(this.checkClosed().getConnectionMutex()) {
                if (this.useLegacyDatetimeCode) {
                    return TimeUtil.fastDateCreate(year, month, day, cal);
                } else {
                    if (cal == null) {
                        this.createCalendarIfNeeded();
                        cal = this.fastDateCal;
                    }
    
                    boolean useGmtMillis = this.connection.getUseGmtMillisForDatetimes();
                    return TimeUtil.fastDateCreate(useGmtMillis, useGmtMillis ? this.getGmtCalendar() : cal, cal, year, month, day);
                }
            }
        }

    getDate的时候, 不管数据库的连接的url的时区的
    所以不论数据库连接的url是何种时区,调用getDate的时候都是默认的时区
    所以要加Calendar

    而getTimestamp的时候,如果数据库连接里没有加useTimezone=true,则不论其怎么加Calendar参数结果都是不变的,都是按照默认值。

    
    rs.getTimestamp(2, Calendar.getInstance(TimeZone.getTimeZone("GMT+8")));
    
    public Timestamp getTimestamp(int columnIndex) throws SQLException {
        return this.getTimestampInternal(columnIndex, (Calendar)null, this.getDefaultTimeZone(), false);
    }
    
    
    public Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
        return this.getTimestampInternal(columnIndex, cal, cal.getTimeZone(), true);
    }
    展开全文
  • JDBC驱动程序的5.2,5.6,5.7版本与UTC时区配合使用,必须在连接字符串中明确...useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

    JDBC驱动程序的5.2,5.6,5.7版本与UTC时区配合使用,必须在连接字符串中明确指定serverTimezone。

    jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
    

    在这里插入图片描述

    展开全文
  • JDBC时区异常错误解决

    千次阅读 2019-04-12 21:25:09
    ** ... ** 解决方法:在配置文件appliction.properties文件中修改 ...spring.datasource.url=jdbc:...后面添加useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

    **

    com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or represents more than one time zone异常

    **

    解决方法:在配置文件appliction.properties文件中修改
    spring.datasource.url=jdbc:mysql://localhost:3306/dp?后面添加useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

    展开全文
  • useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=123 spring.datasource.driver-class-name=...
  • jdbc连接mysq之serverTimezone设定

    万次阅读 多人点赞 2016-06-22 09:38:33
    mysql返回的时间总是有问题,比实际时间要早8小时。检查是jdbc连接的url中配置的时区有问题,原先...useUnicode=true&characterEncoding=gbk&useSSL=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=fa
  • useUnicode=true&useJDBCCompliantTimezoneShift=true &useLegacyDatetimeCode=false&serverTimezone=UTC 就是在url配置后面加上 useUnicode=true&useJDBCCompliantTimezoneShift=true &useLegacyDatetimeCode=...
  • 使用c3p0连接池连接数据库出现异常,控制台信息如下: 十一月 18, 2019 10:13:02 上午 ...clinit> 警告: XML configuration disabled! Verify that standard XML libs are available. org.xml.sax.SAXPars...
  • mysql 连接url中useUnicode=true&characterEncoding=UTF-8 的作用 2011年11月06日 22:28:41 阅读数:76055 我们在连接mysql数据库的时候一般都会在url后面添加useUnicode=true&characterEncoding=UTF-8 ,...
  • useLegacyDatetimeCode=false&serverTimezone=UTC" / > 解决原理: 在xml文件中 &符号 需要转义 这个根据 HTML 的转义规则 更改就行 & -> & 适配mysql版本: 这是我换高版本的mysql后出现的...
  • 解决方法:只需要完善数据库的URL路径 spring.datasource.url=jdbc:mysql://localhost:3306/springboot?...useLegacyDatetimeCode=false&serverTimezone=GMT%2B8 只需要修改成你自己的数据库名就可以了 ...
  • connection = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp?useUnicode=true&characterEncoding=UTF-8",DBUSER,DBPASS); 在连接mysql数据库时,用到的url中一般会添加"useUnicode=...
  • 第二个设置useLegacyDatetimeCode仅对于MySQL是必需的。 否则,仅设置hibernate.jdbc.time_zone 。 关键点: spring.jpa.properties.hibernate.jdbc.time_zone=UTC spring.datasource.url=jdbc:mysql://...
  • useUnicode=true&characterEncoding=utf8&nullCatalogMeansCurrent=true&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC"; String user = "root"; String passwd = "1234"; ct = ...
  • 第二个设置useLegacyDatetimeCode只有 MySQL 需要。 否则,仅设置hibernate.jdbc.time_zone 。 关键点: spring.jpa.properties.hibernate.jdbc.time_zone=UTC spring.datasource.url=jdbc:mysql://localhost:3306/...
  • Datax入门使用

    2021-04-23 00:52:47
    serverTimezone=Asia/Shanghai&useLegacyDatetimeCode=false&useSSL=false&nullNamePatternMatchesAll=true&useUnicode=true" ] } ] } }, "writer": { "name": "mysqlwriter", "parameter": { "username": ...
  • JDBC核心技术

    2021-02-11 13:15:39
    useUnicode=true&characterEncoding=utf-8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=Asia/Wuhan"; /*将用户名和密码封装在Propertise中*/ Properties info=new Properties(); info.set...
  • useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC", "mysql用户名", "mysql密码") .dbQuery(new MySqlQuery()) //数据库查询 .schema("mybatis-plus") //数据库...
  • useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver 6.传统方式 ...
  • 详解JDBC

    2020-08-13 07:31:28
    useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=false"; String username="root"; String password="123456"; //获取连接对象 Connection conn = ...
  • 前言 ==本博文结合软件idea进行主要讲解== **springboot的特性主要有** - 简化 Spring 应用程序的创建和开发过程 - 抛弃了繁琐的 xml 配置过程,采用大量的默认配置简化以及注解反射 - 直接使用 java main 方法...
  • serverTimezone=TimeZone&useLegacyDatetimeCode=false 参考: UTC时间、GMT时间、本地时间、Unix时间戳 UTC和GMT时间 Java中的Date和时区转换 SpringBoot 统一时区的方案 spring boot 设置时区 添加...
  • SpringBoot学习笔记

    2021-03-19 17:00:05
    学习目标: SpringBoot学习笔记 学习内容: Spring是为了解决企业级应用开发的复杂性而创建的,简化开发。 Spring是如何简化Java开发的 为了降低Java开发的复杂性,Spring采用了以下4种关键策略: ...
  •  jdbc.driver_class=com.mysql.cj.jdbc.Driver&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC    可以参考这篇文章  使用新版mysql驱动的改变 还有这篇文章  ...
  • Spring Security oAuth2

    2019-12-26 18:11:41
    Spring Security oAuth2OAuth2简介令牌访问与刷新 OAuth2简介 oAuth 协议是为用户资源的授权的标准。Spring Security 是一个安全框架。 令牌访问与刷新 1. Access Token 是客户端访问资源服务器的令牌。...
  • mysql-connector-java 属性介绍5.1.48 版本8.0.16 版本 备份一下, mysql 连接属性解释,想详细了解相关属性的可以 看看, LocalizedErrorMessages.properties 5.1.48 版本 # # ConnectionProperty Descriptions ...
  • user=xxx&password=xxx&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC','select * from apop') YIELD row CREATE (n:Apop {name: row.name, id: row.a_id}) ...
  • alibaba druid数据库...useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC username: username password: ****** #driver-class-name: ...
  • MySql jdbcURL参数全解

    千次阅读 2018-07-10 10:36:18
    常用如: user 数据库用户名(用于连接数据库) passWord 用户密码(用于连接数据库) useUnicode 是否使用Unicode字符集,如果参数characterEncoding设置为...
  • 公司最近在搞服务分离,数据切分方面的东西,因为单张包裹表的数据量实在是太大,并且还在以每天60W的量增长。 之前了解过数据库的分库分表,读过几篇博文,但就只知道个模糊概念, 而且现在回想起来什么都是模模...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,468
精华内容 987
关键字:

uselegacydatetimecode