创建表给字符串类型默认当前时间出错

【 使用环境 】测试环境
【 OB or 其他组件 】
ob4.2.1.3
【 使用版本 】
【问题描述】创建表给字符串类型默认当前时间出错,不改变字段类型,能否给字符串类型默认赋值当前时间字符串
【复现路径】问题出现前后相关操作
执行:

SELECT DATE_FORMAT(CURRENT_TIMESTAMP(), '%Y-%m-%d %H:%i:%S');

成功执行

但是执行

CREATE TABLE `da_extra_field` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `class_id` int(11) NOT NULL COMMENT '类别(组织1/用户2)',
  `name` varchar(20)  DEFAULT NULL COMMENT '字段名',
  `code` varchar(20)  DEFAULT '' COMMENT '字段编码',
  `type` varchar(20)  DEFAULT '' COMMENT '字段类型',
  `sort` int(11) DEFAULT NULL COMMENT '字段排序',
  `status` tinyint(4) DEFAULT 1 COMMENT '字段状态(1:启用;0:禁用)',
  `other` varchar(255)  DEFAULT NULL COMMENT '字段要求',
  `created_by` varchar(255)  DEFAULT NULL COMMENT '创建人',
  `created_time` varchar(255)  DEFAULT DATE_FORMAT(CURRENT_TIMESTAMP(), '%Y-%m-%d %H:%i:%S') COMMENT '创建时间',
  `modified_by` varchar(255)  DEFAULT NULL COMMENT '修改人',
  `modified_time` varchar(255)  DEFAULT DATE_FORMAT(CURRENT_TIMESTAMP(), '%Y-%m-%d %H:%i:%S') COMMENT '修改时间',
  `remark` varchar(255)  DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=64 ;

报错:

You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near 'DATE_FORMAT(CURRENT_TIMESTAMP(), '%Y-%m-%d %H:%i:%S') COMMENT '创建时间',
 ' at line 11

不改变字段类型,能否给字符串类型默认赋值当前时间字符串
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

  • 这个 SQL 放在 MySQL 里也报错。因为 MySQL 的 SQL 规范是 列除了 timestampdatetime 列外,默认值不能是函数。8.0.13 前后的版本还有些细节的区别。 11.6 数据类型默认值_MySQL 8.0 参考手册
  • 如果是时间,建议就用 datetime 列或 timestamp 列,这样带默认值 current_timestamp 是可以的。用字符串存储时间,无疑是为将来挖坑。

我们原系统是mariadb10.3,允许这么写

`created_time` varchar(255)  CURRENT_TIMESTAMP()

但是ob不支持,转字符串ob也不行,我们看看能不能把字段类型改下 :joy:

原来如此, mariadb 是加了一些不错的功能。这倒没有想到。看以后 OB 跟不跟了。

老师 麻烦在 GitHub 给我们提issue 吧 地址:Issues · oceanbase/oceanbase · GitHub