前言
由於本學期開始數據庫和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