[gogf/gf]查delete_at本来是0000-00-00 00:00:00 却返回了-0001-11-30 00:00:00

2024-06-25 343 views
4

为什么GF框架数据库查delete_at本来是0000-00-00 00:00:00 却返回了-0001-11-30 00:00:00?

image image image

回答

6

@ren-jimmy 这是因为给定的字符串0000-00-00 00:00:00本身不是一个有效的日期格式,底层标准库在解析的时候返回的就是-0001-11-30 00:00:00这个结果,不过GF可以在做一层识别改进,将错误的日期格式转换为空。

9

不能直接返回字符串吗?因为既然mysql可以存储,最好是返回相同的数据

7

我觉得第一优先必须是数据的一致性,不然这将会导致各种各样的问题,其次才是是否哪种格式,格式可以自己去转换,但是返回的数据就不一致,这个完全没办法处理

0

@ren-jimmy 你的完整的建表语句给我试试呢,另外用的是mysql什么版本?

1

CREATE TABLE stock ( id int(10) unsigned NOT NULL AUTO_INCREMENT, stock_name varchar(50) NOT NULL COMMENT '股票名称', stock_no varchar(50) NOT NULL COMMENT '股票编号', create_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', delete_at timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '删除时间', PRIMARY KEY (id), KEY stock_no (stock_no) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='股票列表';

MySQL 版本:5.7.26

7

@ren-jimmy Error Code: 1067. Invalid default value for 'delete_at'

2

你是创建表的时候报错?应该不会,有给默认值,我这边没报错

1

@ren-jimmy 我在底层对时间转换做了写处理,当给定的时间不是一个有效的时间格式时,返回空,而不是-0001-11-30 00:00:00,已提交到master分支,你可以试试。