MySQL中的日期字段datetime是一種十分常用的數(shù)據(jù)類型,它可以用來(lái)儲(chǔ)存時(shí)間和日期的信息。當(dāng)我們?cè)趧?chuàng)建數(shù)據(jù)表時(shí),如果沒(méi)有指定datetime字段的默認(rèn)值,則MySQL會(huì)默認(rèn)把該字段的默認(rèn)值設(shè)置為'0000-00-00 00:00:00'。
CREATE TABLE `demo_table` ( `id` int(11) NOT NULL, `name` varchar(100) NOT NULL, `create_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
上述代碼中,我們創(chuàng)建了一個(gè)名為demo_table的數(shù)據(jù)表,并為create_time字段設(shè)置了一個(gè)默認(rèn)值'0000-00-00 00:00:00'。這意味著在插入數(shù)據(jù)時(shí),如果沒(méi)有指定create_time字段的值,MySQL會(huì)自動(dòng)將其設(shè)置為'0000-00-00 00:00:00'。
然而,需要注意的是,在MySQL 5.7.5之后,MySQL不再支持將datetime字段的默認(rèn)值設(shè)置為'0000-00-00 00:00:00'。如果強(qiáng)制將datetime字段的默認(rèn)值設(shè)置為'0000-00-00 00:00:00',則會(huì)收到如下錯(cuò)誤提示:
ERROR 1067 (42000): Invalid default value for 'create_time'
為了解決這個(gè)問(wèn)題,可以將datetime字段的默認(rèn)值設(shè)置為當(dāng)前時(shí)間:
CREATE TABLE `demo_table` ( `id` int(11) NOT NULL, `name` varchar(100) NOT NULL, `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
在上述代碼中,我們?yōu)閏reate_time字段的默認(rèn)值設(shè)置為當(dāng)前時(shí)間。這樣在插入數(shù)據(jù)時(shí),如果沒(méi)有指定create_time字段的值,MySQL會(huì)自動(dòng)將其設(shè)置為當(dāng)前時(shí)間。
總之,當(dāng)我們?cè)趧?chuàng)建數(shù)據(jù)表時(shí),如果沒(méi)有指定datetime字段的默認(rèn)值,MySQL會(huì)默認(rèn)將其設(shè)置為'0000-00-00 00:00:00'。但是,在MySQL 5.7.5之后,MySQL不再支持將datetime字段的默認(rèn)值設(shè)置為'0000-00-00 00:00:00'。為了解決這個(gè)問(wèn)題,建議將datetime字段的默認(rèn)值設(shè)置為當(dāng)前時(shí)間。