关于timestamp的精度问题

【 使用环境 】个人使用环境 Windows 11 docker
【 OB or 其他组件 】ob docker
【 使用版本 】4.2.1.10 docker 最新版本
【问题描述】我在建表的时候尝试创建一个纳秒级别的timestamp,但是无法创建
ALTER TABLE bbs.test MODIFY COLUMN time timestamp(9) NULL;
提示
Too big precision 9 specified for column ‘createTime’. Maximum is 6.
[172.17.0.2:2882] [2025-01-16 07:06:49.056186] [YB42AC110002-00062BCD41E94068-0-0]
链接是官方文档,里面说支持9位的timestamp
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000222345
链接为官网的帮助文档

然后我尝试直接创建也出现问题
CREATE TABLE users (
userId bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘主键,自增长,用于唯一标识每个用户记录’,
userName varchar(50) NOT NULL COMMENT ‘用户名,唯一’,
passwordHash varchar(255) NOT NULL COMMENT ‘密码的哈希值’,
email varchar(100) NOT NULL COMMENT ‘邮箱’,
phone varchar(20) NOT NULL COMMENT ‘手机号码’,
roleId tinyint(4) NOT NULL DEFAULT ‘3’ COMMENT ‘角色,1表示管理员,2表示版主,3表示普通用户,4表示封禁’,
avatarUrl varchar(255) DEFAULT NULL COMMENT ‘头像URL’,
status tinyint(4) NOT NULL DEFAULT ‘1’ COMMENT ‘用户状态,1表示活跃,2表示封禁,3表示未激活’,
createTime TIMESTAMP(9) NOT NULL DEFAULT CURRENT_TIMESTAMP(9) COMMENT ‘账户创建时间’,
lastLogin TIMESTAMP(9) NOT NULL DEFAULT CURRENT_TIMESTAMP(9) COMMENT ‘上次登录时间’,
PRIMARY KEY (userId) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=‘用户表’;

你哪个是oralce模式的 obmysql社区版 支持6位
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000222531

1 个赞

你好,
1、关于timestamp类型,目前obmysql模式支持到6位,oboracle模式支持9位,oracle模式为企业版独有。
2、mysql模式下也可以通过varchar或者bigint存储时间戳,再通过应用层处理为需要的格式。

2 个赞

1、关于timestamp类型,目前obmysql模式支持到6位,oboracle模式支持9位,oracle模式为企业版独有。
2、mysql模式下也可以通过varchar或者bigint存储时间戳,再通过应用层处理为需要的格式。

1 个赞

哈哈,我大意了,没注意到是oralce的