数据库使用 mysql 8.0.16
管理工具使用 Navicat
CREATE TABLE
IF
NOT EXISTS `Table2` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`Attribute1` datetime NOT NULL DEFAULT ( CURRENT_TIMESTAMP ),
`Attribute2` date NOT NULL DEFAULT ( CURRENT_DATE ),
`Attribute3` datetime NULL,
`Attribute4` date NULL,
`created_time` datetime NULL,
`updated_time` datetime NULL,
`created_by` BIGINT NULL,
`updated_by` BIGINT NULL,
PRIMARY KEY ( Id ));
Attribute1 是 datetime 类型 默认值使用了函数 CURRENT_TIMESTAMP
Attribute2 是 date 类型 使用默认值函数 CURRENT_DATE ,都是必填
SHOW FULL COLUMNS FROM `table2`
可以看到 Attribute1 的默认值变成了 now() Attribute2 的默认值变成了 curdate()
我很疑惑 为什么 默认值 换了函数?
ALTER TABLE`table2`
ADD INDEX `111`(`Attribute1`, `Attribute2`);
> 1067 - Invalid default value for 'Attribute1'
> 时间: 0.002s
在这 2 个字段上加索引会报错 错误的默认值
ALTER TABLE `rcpr_rd1_aa1_b`.`table2`
MODIFY COLUMN `Attribute1` datetime NOT NULL DEFAULT (CURRENT_TIMESTAMP) AFTER `id`,
MODIFY COLUMN `Attribute2` date NOT NULL DEFAULT (CURRENT_DATE) AFTER `Attribute1`,
ADD INDEX `121`(`Attribute1`, `Attribute2`);
此时 我直接修改 这 2 个字段的类型 并直接加上 索引
挺神奇的,居然没报错,索引也加上去了。
mysql 的那两个默认值为什么会变
为什么加索引提示错误默认值
修改字段语句和加索引语句放一起为什么又没报错
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.