理一理Mysql日期

在 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 存储的 必须是正确的时间格式才行。如果存了其他非日期,会出现类型转换异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值