在 MySQL 數據庫中,關于日期和時間的類型主要有以下幾種:
1. **DATE**: 僅存儲日期部分,格式為 `YYYY-MM-DD`,例如 `2023-10-31`。
2. **TIME**: 僅存儲時間部分,格式為 `HH:MM:SS`,例如 `14:30:00`。
3. **DATETIME**: 存儲日期和時間,格式為 `YYYY-MM-DD HH:MM:SS`,例如 `2023-10-31 14:30:00`。
4. **TIMESTAMP**: 存儲日期和時間,格式為 `YYYY-MM-DD HH:MM:SS`,并且會根據時區進行轉換,通常用于記錄數據的創建和修改時間。
5. **YEAR**: 存儲年份,格式為 `YYYY`,例如 `2023`。
這些類型可以根據具體需求選擇使用,以便在數據庫中存儲和處理日期和時間數據。
在 MySQL 中,`TIMESTAMP` 類型有一些限制和注意事項:
1. **時區影響**:`TIMESTAMP` 會根據服務器的時區進行存儲和檢索,因此在不同的時區環境中可能會導致時間不一致的問題。
2. **自動初始化和更新**:`TIMESTAMP` 列可以自動初始化為當前時間或在記錄更新時自動更新為當前時間。這在某些情況下很有用,但也可能導致意外的行為。
3. **范圍限制**:`TIMESTAMP` 的有效范圍是 `1970-01-01 00:00:01` UTC 到 `2038-01-19 03:14:07` UTC。如果需要存儲超出此范圍的日期和時間,建議使用 `DATETIME` 類型。
4. **默認值限制**:在 MySQL 5.6 之前,`TIMESTAMP` 列必須有一個默認值,通常是 `CURRENT_TIMESTAMP`。在 MySQL 5.6 及之后的版本中,這個限制有所放寬。
5. **存儲大小**:`TIMESTAMP` 占用 4 字節的存儲空間,而 `DATETIME` 占用 8 字節。
這些限制在使用 `TIMESTAMP` 類型時需要注意,以確保數據的正確性和一致性。
如果保存的時間是?1900-01-01 00:00:00,?
timestamp 類型是保存不了的
一般使用DATETIME類型就可以了。包含了 日期和時間,如果有些場景只需要日期,比如按天維度的,那么用DATE來存儲。
建議不使用?timestamp類型,因為存儲范圍有限。
所以,首先?DATETIME,其次根據需要選?DATE
再JDK中,提供了三種日期:
1.?
java.util.Date
util 包下的Date,就是 包含日期和時間,不論數據庫中是什么類型。
例如:
`Mon Jan 01 00:00:00 CST 1900` 這種格式是 Java 中 `Date` 類的默認字符串表示形式。它包含以下部分:
1. **星期**:`Mon` 表示星期一。
2. **月份**:`Jan` 表示一月。
3. **日期**:`01` 表示1號。
4. **時間**:`00:00:00` 表示午夜零點。
5. **時區**:`CST` 表示中國標準時間(China Standard Time)。
6. **年份**:`1900` 表示年份1900年。
這種格式是通過 `Date` 類的 `toString()` 方法生成的。
對于表結構中:
1 如果的Date ,轉為util下的Date時, 時間部分是 00:00:00
2. 如果是Time,轉為util下的Date時,日期部分是 1970-01-01
3. 如果是DATETIME 或者?TIMESTAMP,轉為util下的Date時,沒問題,包含日期 時間
2.
java.sql.Date
java.sql.Time
java.sql.Timestamp
sql 包下的Date,基本和表里的對應
Date 只包含日期
Time只包含時間
Timestamp 包含日期和時間
3.
java.time.LocalDate
java.time.LocalTime
java.time.LocalDateTime
time包下的,和 表里的基本也是對應的
如果表中的字段類型是 varchar,存儲的是時間,也可以用上面三類來就收。
只是,varchar 存儲的 必須是正確的時間格式才行。如果存了其他非日期,會出現類型轉換異常。