前言

由于本学期开始数据库和Java的学习,我便开始下载IntelliJ IDEA。之所以会选择这款编辑器,一是因为它的功能强大,二就是它可以与多种数据库接,直接可以在IntelliJ IDEA上面编写SQL指令。在我看来是很方便的。

经过

当我按照网上的方法一步步下载,安装,破解IntelliJ IDEA和MySQL。虽然中间有一些问题,但最终还是把IntelliJ IDEA和MySQL安装好了。但是却在

IntelliJ IDEA连接MySQL之后出现了问题。

idea连接mysql之后不能编辑数据库 idea连接mysql失败_数据库连接

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

idea连接mysql之后不能编辑数据库 idea连接mysql失败_MySQL_02

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

结果

问题有两个:

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

idea连接mysql之后不能编辑数据库 idea连接mysql失败_MySQL_03

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

  • 时区没有设置(serverTimezone为空)

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

idea连接mysql之后不能编辑数据库 idea连接mysql失败_数据库连接_04

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

解决办法:

在Advanced下的serverTimezone设置成Asia/Shanghai

idea连接mysql之后不能编辑数据库 idea连接mysql失败_数据库连接_05

最终连接成功

idea连接mysql之后不能编辑数据库 idea连接mysql失败_MySQL_06

 

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

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项不能为空。


  • 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 = '王一';

 

 

idea连接mysql之后不能编辑数据库 idea连接mysql失败_数据库_07

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

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

 

补充:

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

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

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

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

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