---
title: show create table 展示 TIMESTAMP 类型分区键显示有问题-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于show create table 展示 TIMESTAMP 类型分区键显示有问题相关的常见问题和使用技巧，帮助您快速解决show create table 展示 TIMESTAMP 类型分区键显示有问题的难题。
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# show create table 展示 TIMESTAMP 类型分区键显示有问题

更新时间：2026-08-25 08:16

适用版本： V1.4.x、V2.1.x、V2.2.x、V3.1.x、V3.2.x、V3.3.x、V4.0.x、V4.1.x、V4.2.x、V4.3.x、V4.4.x 内容类型：Troubleshoot  

## 问题现象

在 OceanBase 数据库中，当分区键的数据类型为 TIMESTAMP(0) 时，使用 `show create table` 命令查看表结构，分区键的值显示多出了一个小数点，例如显示为 `partition "P201903" values less than (Timestamp '2019-04-01 00:00:00.')`。这种显示异常会导致 OMS 同步 DDL 语句创建表时出现语法错误 `OBE-01861: literal does not match format string`。

- `show create table` 输出中，分区键值显示为 `Timestamp '2019-04-01 00:00:00.'`，时间字符串末尾多出一个小数点。
 - 使用 `show create table` 的输出作为建表语句执行时，报错 `OBE-01861: literal does not match format string`。

## 关键诊断信息

### 触发条件

- 该问题出现在所有版本的 OceanBase 数据库中。
 - 分区键的数据类型为 TIMESTAMP(0) 时，使用 `show create table` 命令查看表结构。

### 事后诊断

复现案例如下：

1. 创建分区键为 TIMESTAMP(0) 类型的表：

```sql
CREATE TABLE TEST11(
  "VID" VARCHAR2(40) NOT NULL ENABLE,
  "CREATERECORDTIME" TIMESTAMP(0) NOT NULL ENABLE,
  "UPDATERECORDTIME" TIMESTAMP(0),
  "TOUSERNAME" VARCHAR2(30),
  "FROMUSERNAME" VARCHAR2(40),
  "CREATETIME" VARCHAR2(25),
  "MSGTYPE" VARCHAR2(8),
  "EVENT" VARCHAR2(15),
  "EVENTKEY" VARCHAR2(20),
  CONSTRAINT "PK_TEST11" PRIMARY KEY ("VID", "CREATERECORDTIME")
) COMPRESS FOR ARCHIVE REPLICA_NUM = 3 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
partition by range(CREATERECORDTIME)
(partition "P201903" values less than (Timestamp '2019-04-01 00:00:00'),
partition "PMAX" values less than (MAXVALUE));

```

2. 执行 `show create table TEST11;` 查看表结构，输出中的分区定义如下，分区键值末尾多出一个小数点：

```sql
partition by range(CREATERECORDTIME)
(partition "P201903" values less than (Timestamp '2019-04-01 00:00:00.'),
partition "PMAX" values less than (MAXVALUE))

```

3. 使用 `show create table` 的输出作为建表语句执行，报语法错误：

```sql
obclient> CREATE TABLE "TEST112" (
    ->   "VID" VARCHAR2(40) NOT NULL ENABLE,
    ->   "CREATERECORDTIME" TIMESTAMP(0) NOT NULL ENABLE,
    ->   "UPDATERECORDTIME" TIMESTAMP(0),
    ->   "TOUSERNAME" VARCHAR2(30),
    ->   "FROMUSERNAME" VARCHAR2(40),
    ->   "CREATETIME" VARCHAR2(25),
    ->   "MSGTYPE" VARCHAR2(8),
    ->   "EVENT" VARCHAR2(15),
    ->   "EVENTKEY" VARCHAR2(20),
    ->   CONSTRAINT "PK_TEST112" PRIMARY KEY ("VID", "CREATERECORDTIME")
    -> ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE ENABLE_MACRO_BLOCK_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
    ->  partition by range(CREATERECORDTIME)
    -> (partition "P201903" values less than (Timestamp '2019-04-01 00:00:00.'),
    ->  partition "PMAX" values less than (MAXVALUE));
OBE-01861: literal does not match format string

```

## 问题原因

该问题由 OceanBase 数据库 Oracle 模式下 `show create table` 命令的展示格式缺陷导致。当分区键的数据类型为 TIMESTAMP(0)（即精度为 0，不需要小数秒）时，`show create table` 在展示时间字符串后添加了一个小数点，但没有跟随任何小数位数字，从而导致了显示上的问题。如果下游工具直接执行 `show create table` 的输出内容，会报错 `OBE-01861: literal does not match format string`。该问题在所有版本中都存在。 TIMESTAMP 数据类型定义：`TIMESTAMP` 或 `TIMESTAMP(p)`，其中 p=0~9 表示秒的小数精度，缺省为 6。 字面量写法：`TIMESTAMP 'YYYY-MM-DD HH24:MI:SS[.FF]'` 示例：`TIMESTAMP '2019-04-01 00:00:00'`、`TIMESTAMP '2025-12-21 12:34:56.123456789'` `TIMESTAMP(4)` 保留到毫秒后 4 位（1/10,000 秒），示例如下：

```sql
CREATE TABLE t (
  id  NUMBER,
  ts  TIMESTAMP(4)
);
INSERT INTO t VALUES (1, TIMESTAMP '2025-12-21 12:34:56.1234567');
-- 存储为 2025-12-21 12:34:56.1235（超出部分四舍五入）

```

原生 Oracle 的行为：展示 DDL 时尾部是不带点的。原生 Oracle 展示行（to_char）时确认是尾部带点的，但并不能构造成 Timestamp，`show create table` 展示时需要特殊处理。

## 问题的风险及影响

- OMS 同步创建表时可能因为显示异常而失败。
 - 影响数据库表的正常创建和管理。

## 影响租户

| sys | MySQL | Oracle |
| --- | --- | --- |
| NO | NO | YES |

## 影响版本

该问题影响所有版本的 OceanBase 数据库。

## 解决方法

若需立即解决问题，可参考下文"规避方式"。

## 规避方式

1. 将 TIMESTAMP(0) 改为 TIMESTAMP(1) 或更高精度：

```sql
"CREATERECORDTIME" TIMESTAMP(1) NOT NULL ENABLE,
(partition "P201903" values less than (Timestamp '2019-04-01 00:00:00.0'))

```

2. 不指定精度，使用默认值：

```sql
"CREATERECORDTIME" TIMESTAMP NOT NULL ENABLE,
(partition "P201903" values less than (TO_DATE('2019-04-01', 'YYYY-MM-DD')))

```

3. 如果不需要时间精度，可以使用 DATE 类型：

```sql
"CREATERECORDTIME" DATE NOT NULL ENABLE,
(partition "P201903" values less than (TO_DATE('2019-04-01', 'YYYY-MM-DD')))

```

上一篇

[复制表场景无法命中 Plan Cache 问题分析与解决](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000006868974)

下一篇

[单条 SQL 内存使用超限和写临时文件超限报错分析方法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000006897661) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
