java访问MySQL,框架等排除,在将一条记录保存进入数据库的瞬间出现问题,具体描述如下:
生成一个对象,例如
MyObject myObject = new MyObject();
myObject.setName = "testName";
myObject.setTime = new Date();
此时system.out出来的myObject.getTime();都是正确的时间,但是一旦我保存进MySQL中就有可能变成8个小时以后的时间
比如我new Date()输出为1点,保存前打印这个时间还是1点,但是保存进MySQL后打开数据库看记录,变成9点了
而且最郁闷的是,这个变化无规律可言,有时没问题,有的时候会变掉,起码到现在为止还没找到规律。
MySQL已经set global time_zone = '+8:00'了

解决方案 »

  1.   

    建议把java的所有系统properties打出来,看看它的时区是多少来着,
    再来作决定也不迟。
      

  2.   

    我的表里面有timestamp,似乎这个自动生成的值还没出过错。我试过打印java的所有system变量了,虽然我现在忘了是多少,但是我记得是正确的我在java里试过循环10万次输出时间,都是系统当前时间
      

  3.   

    这并不表明time_zone是正确的。相信JDBC完全是根据Java的time_zone对返回值进行加工的。
    System.Properties.list(System.out)
    好像有这么个函数,打出来瞅瞅。
      

  4.   

    user.timezone = 
    我打出来了,后面没东西真的是这个原因么?
    那我怎么让后面这个固定下来?另外,我在程序里面取时间的时候,显式地设置过了时区,然后再取时间,还是会有一样的问题出现。
      

  5.   

    没有遇过这种错误
    打印出来正确,那应该是mysql的问题。
      

  6.   

    我猜绝大多数可能问题是出在MySQL上,如果不能解决问题,大家帮忙想想,怎么能找到问题也好啊
      

  7.   

    mysql> SELECT @@global.time_zone, @@session.time_zone;看显示的值是否是system,如果为’SYSTEM’,说明服务器时区与系统时区相同,插入应该没有问题的。如果不是system的话,重新加载时区表,试一下是否可以。
      

  8.   


    是system现在经过各种检查,JDK方面似乎也没问题,MySQL方面似乎也没问题,但是怎么两个何在一起就会出问题呢?继续等待大家帮忙
      

  9.   

    估计是你系统设置的时区与mysql中设置的时区不一致造成的.
      

  10.   

    系统时区是+8,这个肯定是确认过的
    MySQL用的既然是system时区,那么就应该一致了
    继续等待
      

  11.   

    用MYSQL convert_tz转换一下看看
      

  12.   

    貌似找到问题了
    找到一种说法是windows的某一个更新补丁将注册表里面的时区改成了0时区了,所以比我们这里时间少8个小时
    我下了个用来恢复这个问题的注册表,貌似现在是好了,等待时间的验证
    因为这个问题本身也不是一直发生的,等一段时间看看会不会发生。