idea 连接 mysql_IntelliJ IDEA配置MySQL出现的连接问题

本文记录了在IntelliJ IDEA中配置连接MySQL时遇到的问题,包括未建立数据库导致的连接失败及serverTimezone设置为空引起的错误。通过一系列测试,得出serverTimezone不能为空且正确设置能确保时间同步。最后总结了timestamp字段不同定义下的时间行为。
摘要由CSDN通过智能技术生成

29f176a3fde01912d4c230177e531120.png

上网查的结果大都是说时区设置错误;

922a03bea45ca596b918cd630366e682.png

于是在MySQL中改动时区设置,结果还是显示连接不上。一个人从早上改到晚上,结果还是不行。 一切没有办法的时候,我找到我的班主任。班主任很耐心帮我解决了这个问题。

结果

问题有两个:

连接的数据库,事先并没有建立。

4ef7ae78843c5dedc73702b8debdf3ee.png

而这个问题连接检测并不会直接提示出来,显示问题是时区配置问题。一直使我误以为是时区设置错误。出现这个问题的原因是:我不熟悉IntelliJ IDEA的操作,错误的以为Database后面填的是自己要建立数据库名,实际上却是IntelliJ IDEA要连接的数据库名。

时区没有设置(serverTimezone为空)

当我改为一个已经建立的数据库时,依然出现和开始相同的问题。

7faf6cdf09e1b19d79472e951b5e703c.png

于是又在MySQL中改动时区设置,结果还是显示连接不上。

解决办法:

在Advanced下的serverTimezone设置成Asia/Shanghai

ed22882567e0b1dc43480ad02e850b45.png

最终连接成功

a4a727ff09bcd1308d4dab804b5e62aa.png

在我以为这事终于可以放下的时候,班主任老师告诉我解决问题不能局限于表面,连接正常只是表面上这个问题解决了。但是为什么这样就能连号,换成别的时区会有什么影响。于是让我做了一个测试。

1.将idea数据库连接serverTimezone项还原为初始状态(空),测试数据库连接

2.确认MySQL使用的时区

3.如果不能确认,手动将MySQL time_zone设置为北京时间(+08:00),测试数据库连接

4.将MySQL time_zone设置为UTC(+00:00),测试数据库连接

以上测试可得到何种结论?

5.将idea数据库连接serverTimezone项设置为UTC,测试数据库连接

6.将MySQL time_zone设置为北京时间(+08:00),测试数据库连接

7.将idea数据库连接serverTimezone项设置为Asia/Shanghai,测试数据库连接

8.将idea数据库连接serverTimezone项设置为任意时区(http://www.360doc.com/content/19/0806/11/39194723_853278521.shtml),测试数据库连接

以上测试可得到何种结论?

9.将idea数据库连接serverTimezone项设置为UTC,将MySQL time_zone设置为北京时间(+08:00),完成数据库写入(带插入时间)

查询数据,有何现象?

这一系列的测试做下,我还是有点懵。尤其是在MySQL中的操作,我常常怀疑自己做的到底对不对。

班主任老师又给我耐心的讲了这个测试。

得到的结果是:

serverTimezone项若为空,连接就会失败。原因就是

MySQL规定serverTimezone项不能为空。

https://www.cnblogs.com/zhuitian/p/12436300.html

serverTimezone项只要不为空,无论是否与MySQL时区相匹配,连接都可以成功。

但是不使用Asia/Shanghai时间和不把MySQL中的时区(+8:00)会使得数据库返回的时间与当前时间相差8小时。

将idea数据库连接serverTimezone项设置为UTC,将MySQL time_zone设置为北京时间(+08:00),完成数据库写入

1 CREATE TABLE class_member(

2 id INT(2) AUTO_INCREMENT PRIMARY KEY,

3 name VARCHAR(20) NOT NULL UNIQUE,

4 age TINYINT(2) NOT NULL,

5 CreateTime datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

6 modify_time timestamp

7 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

8 );

9 INSERT INTO class_member(id, name, age)

10 VALUES ('101','刘丽','13'),

11 ('102','王一','14'),

12 ('103','王二','15'),

13 ('104','王三','16'),

14 ('105','刘二','14'),

15 ('106','李东','15');

16 SELECT *

17 FROM class_member;

18 update class_member set age = 16 where name = '王一';

19 SELECT *

20 FROM class_member;

21

22 SELECT *

23 FROM class_member;

24 SELECT *

25 FROM class_member;

26 update class_member set age = 16 where name = '王二';

27 INSERT INTO class_member(id,name,age)VALUES ('107','张小明','17');

28 show variables like '%time_zone%';

29 set time_zone = '+8:00';

30 SELECT *

31 FROM class_member;

32 update class_member set age = 17 where name = '王一';

086f900ffaa42ee45b0dc86552adda18.png

前面是北京时间,后面是UTC。

至此这个问题终于告一段落。

补充:

1、当字段定义为timestamp,表示该字段在插入和更新时都不会自动设置为当前时间。他会显示为NULL,并且修改数据后返回的时间依然是NULL。

2、当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP,表示该字段仅在插入且未指定值时被赋予当前时间,再更新时且未指定值时不做修改。因此这个可以用来显示表的创建时间。就是首次创建的时间。

3、当字段定义为timestamp ON UPDATE CURRENT_TIMESTAMP,表示该字段在插入且未指定值时被赋值为"0000-00-00 00:00:00",在更新且未指定值时更新为当前时间。

4、当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,表示该字段在插入或更新时未指定值,则被赋值为当前时间。这个时间才可以捉到修改数据及时得到修改时间。

执行一次数据修改。发现果然如此,DEFAULT CURRENT_TIMESTAMP定义的时间未变,ON UPDATE CURRENT_TIMESTAMP定义的时间发生改变。

文档:关于在IntelliJ IDEA配置MySQL出现的连...

链接:http://note.youdao.com/noteshareid=0155a791ecb9e6a44d2ea615770bbbb7&sub=CBF383EFF1CA4AA69DA54D2A2B7431AE

2020/03/14 01:04

标签:00,IntelliJ,数据库,serverTimezone,IDEA,member,MySQL,连接

来源: https://www.cnblogs.com/xueyisheng/p/12491357.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值