Python先来看看date类型吧!In[1]:fromdatetimeimportdateIn[2]:date.minOut[2]:datetime.date(1,1,1)In[3]:str(date.min)Out[3]:'0001-01-01'In[4]:str(date.max)Out[4]:'9999-12-31'可以看到date的取值范围是0001-01-01到9999-12-31让我们来看看datetime吧!In[5]:fromdatetimeimportdatetimeIn[6]:str(datetime.min)Out[6]:'0001-01-0100:00:00'In[7]:str(datetime.max)Out[7]]:'9999-12-3123:59:59.999999'可以看到datetime的取值范围是0001-01-0100:00:00到9999-12-3123:59:59.999999mysql看情况以mysql为例,如下官方文档中的内容:DATE类型用于有日期部分但没有时间部分的值。MySQL以'YYYY-MM-DD'格式检索和显示DATE值。支持的范围是“1000-01-01”到“9999-12-31”。DATETIME类型用于同时包含日期和时间部分的值。MySQL以'YYYY-MM-DDhh:mm:ss'格式检索和显示DATETIME值。支持的范围是'1000-01-0100:00:00'到'9999-12-3123:59:59'。TIMESTAMP数据类型用于包含日期和时间部分的值。TIMESTAMP的范围是“1970-01-0100:00:01”UTC到“2038-01-1903:14:07”UTC。总结一下:date的取值范围:1000-01-01到9999-12-31timestamp的取值范围:1970-01-0100:00:01到2038-01-1903:14:07datetime取值范围:1000-01-0100:00:00至9999-12-3123:59:59参考资料:mysql文档但需要注意:无效的DATE、DATETIME或TIMESTAMP值被转换为“零”适当类型的值('0000-00-00'或'0000-00-0000:00:00'),如果SQL模式允许此转换。精确的行为取决于是否启用了严格SQL模式和NO_ZERO_DATESQL模式;参见第5.1.10节,“服务器SQL模式”。还有这部分:翻译的意思是myql会将invaliddate设置为0000-00-00,invaliddatetime和timestamp设置为0000-00-0000:00:00。例如,2022-13-35是无效日期。将这个值插入到mysql中,启用严格模式的mysql会报错,没有启用。严格模式下的mysql会保存为0000-00-00。??所以我们在使用Python从mysql中读取时间类型的时候,一定要注意这个坑!因为没有办法把0000-00-00转成Python的日期类型,所以会报错!??顺便看看Mysql的date,timestamp,datetime各占多少字节:date类型3字节timestamp类型4字节datetime类型8字节参考文章:数据类型存储要求关于Mysql插入的时间类型可以be0000-00-00这种格式的原因可以参考:MySQLIncorrectdatetimevalue:'0000-00-0000:00:00'isnotallowedtoinsertthisinvalidtimedefaultinMysql8
