IntelliJ IDEA配置MySQL出現的連接問題


前言
由於本學期開始數據庫和Java的學習,我便開始下載IntelliJ IDEA。之所以會選擇這款編輯器,一是因為它的功能強大,二就是它可以與多種數據庫接,直接可以在IntelliJ IDEA上面編寫SQL指令。在我看來是很方便的。
經過
當我按照網上的方法一步步下載,安裝,破解IntelliJ IDEA和MySQL。雖然中間有一些問題,但最終還是把IntelliJ IDEA和MySQL安裝好了。但是卻在
IntelliJ IDEA連接MySQL之后出現了問題。
上網查的結果大都是說時區設置錯誤;
於是在MySQL中改動時區設置,結果還是顯示連接不上。一個人從早上改到晚上,結果還是不行。 一切沒有辦法的時候,我找到我的班主任。班主任很耐心幫我解決了這個問題。
結果
問題有兩個:
  • 連接的數據庫,事先並沒有建立。
而這個問題連接檢測並不會直接提示出來,顯示問題是時區配置問題。一直使我誤以為是時區設置錯誤。出現這個問題的原因是:我不熟悉IntelliJ IDEA的操作,錯誤的以為Database后面填的是自己要建立數據庫名,實際上卻是IntelliJ IDEA要連接的數據庫名。
  • 時區沒有設置(serverTimezone為空)
當我改為一個已經建立的數據庫時,依然出現和開始相同的問題。
於是又在MySQL中改動時區設置,結果還是顯示連接不上。
解決辦法:
在Advanced下的serverTimezone設置成Asia/Shanghai
最終連接成功
 
在我以為這事終於可以放下的時候,班主任老師告訴我解決問題不能局限於表面,連接正常只是表面上這個問題解決了。但是為什么這樣就能連號,換成別的時區會有什么影響。於是讓我做了一個測試。
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 = '王一';

 

 
前面是北京時間,后面是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出現的連...
2020/03/14 01:04


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM