前言
基于本人在工作中遇到的问题,某一天在把时间信息存入表中字段时出现了如下报错信息:
Data truncation: Incorrect datetime value: '2118-12-12 11:01:05.768' for column 'created' at row 1
遇到这种情况怎么办
- 首先自己先缩小存入字段的值,看是否还是报错;
- 当尝试到值小于2038-01-19时,值是可以存入字段;
- 查看数据库表中这个日期字段的类型,发现类型是timestamp,然后根据这种情况查看MYsql的官方文档;
- 以下是在官方文档上发现的一句说明
The TIMESTAMP data type is used for values that contain both date and time parts. TIMESTAMP has a range of '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC.
- 通过这句说明了解到timestamp类型的日期存储范围在'1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC之间,所以是表字段的类型限制的存储的值;
如何解决
通过以上分析已经了解到报错的基本原因
- 那么接下来就了解怎么解决这种情况吧;
- 通过官方文档了解Mysql的日期字段类型有几种,分别的存储范围是多少,占用的存储空间是多少;
- 通过了解官方文档是如此说明,在Mysql5.6.4之前和之后的占用存储空间有所变化;
日期类型 | Mysql 5.6.4 之前的存储空间 | Mysql 5.6.4 之后的存储空间 |
---|---|---|
YEAR | 1 byte | 1 byte |
DATE | 3 bytes | 3 bytes |
TIME | 3 bytes | 3 bytes+ fractional seconds storage |
DATETIME | 8 bytes | 5 bytes+ fractional seconds storage |
TIMESTAMP | 4 bytes | 4 bytes+ fractional seconds storage |
Fractional Seconds Precision | Storage Required |
---|---|
0 | 0 bytes |
1, 2 | 1 byte |
3, 4 | 2 bytes |
5, 6 | 3 bytes |
- 通过以上表格可以了解到在Mysql5.6.4之后,time,datetime,timestamp这三个类型占用的存储空间会随着小数为的增加而增加占用的存储空间,但是小数位不能超过三个字节;
- 了解日期范围:
日期类型 | 日期格式 | 日期范围 |
---|---|---|
YEAR | YYYY | '1901 to 2155' |
DATE | YYYY-MM-DD | '1000-01-01' to '9999-12-31' |
TIME | hh:mm:ss | '-838:59:59' to '838:59:59' |
DATETIME | YYYY-MM-DD hh:mm:ss | '1000-01-01 00:00:00' to '9999-12-31 23:59:59' |
TIMESTAMP | YYYY-MM-DD hh:mm:ss | '1970-01-01 00:00:01' to '2038-01-19 03:14:07' |
根据需求只需要把日期的字段的类型修改DATETIME就能解决此类报错问题
总结
- 对你有帮助吗?有帮助就点个赞吧!