---
title: 创建索引报长度超过 16KB 的错误-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于创建索引报长度超过 16KB 的错误相关的常见问题和使用技巧，帮助您快速解决创建索引报长度超过 16KB 的错误的难题。
---
切换语言

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

划线反馈

# 创建索引报长度超过 16KB 的错误

更新时间：2026-05-22 08:56

适用版本： V2.2.x、V3.1.x、V3.2.x 内容类型：Troubleshoot  

## 问题现象

在创建表或索引时，OceanBase 数据库报 key length 超过 16K 的错误。

- Oracle 租户

  ```shell
  ORA-01450: maximum key length (16384) exceeded

  ```

     - 示例 1：Oracle 租户内创建索引

           1. 创建测试表 `test1`。

             ```shell
             obclient [TEST]> create table test1
             (c1 number(20),
             c2 date,
             c3 varchar2(16384),
             c4 varchar2(16385),
             c5 varchar2(4200 char));
             Query OK, 0 rows affected (0.009 sec)

             ```
           2. 在测试表 `test1` 字段 `c1`，`c2`，`c3` 上创建组合索引 `index test1_i1`。

             ```shell
             obclient [TEST]> create index test1_i1 on test1(c1,c2,c3);
             Query OK, 0 rows affected (0.360 sec)

             ```

             创建成功：字符类型字段的总长度 16384=16K，非字符类型的字段长度不计入。
           3. 在测试表 `test1` 字段 `c1`，`c2`，`c4` 上创建组合索引 `index test1_i2`。

             ```shell
             obclient [TEST]> create index test1_i2 on test1(c1,c2,c4);
             ORA-01450: maximum key length (16384) exceeded

             ```

             创建失败：字符类型字段的总长度 16385>16K，非字符类型的字段长度不计入。
           4. 在测试表 `test1` 字段 `c1`，`c2`，`c5` 上创建组合索引 `index test1_i2`。

             ```shell
             obclient [TEST]> create index test1_i2 on test1(c1,c2,c5);
             ORA-01450: maximum key length (16384) exceeded

             ```

             创建失败：字符类型字段的总长度 4200*4=16800>16K，非字符类型的字段长度不计入。
 - MySQL 租户

  ```shell
  ERROR 1071 (42000): Specified key was too long; max key length is 16384 bytes

  ```

     - 示例 2：MySQL 租户内创建索引

             ```shell
             MySQL [test]> create table test1 (c1 bigint(20), c2 date, c3 varchar(16384),c4 varchar(4097),c5 varchar(4096));
             Query OK, 0 rows affected (0.065 sec)

             ```
           2. 在测试表 `test1` 字段 `c1`，`c2`，`c3` 上创建组合索引 `test1_i1`。

             ```shell
             MySQL [test]> create index test1_i1 on test1(c1,c2,c3);
             ERROR 1071 (42000): Specified key was too long; max key length is 16384 bytes

             ```

             创建失败：字符类型字段的总长度 16384*4=65536>16K，非字符类型的字段长度不计入。
           3. 在测试表 `test1` 字段 `c1`，`c2`，`c4` 上创建组合索引 `test1_i1`。

             ```shell
             MySQL [test]> create index test1_i1 on test1(c1,c2,c4);
             ERROR 1071 (42000): Specified key was too long; max key length is 16384 bytes

             ```

             创建失败：字符类型字段的总长度 4097*4=16388>16K，非字符类型的字段长度不计入。
           4. 在测试表 `test1` 字段 `c1`，`c2`，`c5` 上创建组合索引 `test1_i1`。

             ```shell
             MySQL [test]> create index test1_i1 on test1(c1,c2,c5);
             Query OK, 0 rows affected (0.454 sec)

             ```

             创建成功：字符类型字段的总长度 4096*4=16384=16K，非字符类型的字段长度不计入。

## 问题原因

与 Oracle 和 MySQL 类似，在 OceanBase 数据库中，索引中的字符类型的字段的总长度也有固定限制，大小为 16K （16 * 1024=16384） 字节。 关于此长度限制，需要特别注意以下两点。

- 16K 的总长度限制只针对索引中字符类型的字段，其他类型的字段不计入该 16K 的长度限制。
 - 在 OceanBase 数据库的 Oracle 租户和 MySQL 租户中定义字符类型时，默认的长度单位有所不同，需要区别对待。

     - MySQL 租户中，字符类型的默认长度单位是字符（char），而默认的字符集是 utf8bm4，一个字符占位 1 ~ 4 个字节，也就是，当索引中字符的列的总长度（char）超过 4K 就可能达到了 16K 的长度限制。
     - Oracle 租户中，字符类型的默认长度单位是字节（byte），当索引中字符的列的总长度（byte）超过 16K 才会达到 16K 的长度限制。

## 适用版本

OceanBase 数据库 V2.x 和 V3.x 版本。

## 解决方法

通常，我们创建索引的目的是为了加速查询的性能。而一个超大的索引可能并不能提供高效的查询，而且还会带来效大的索引维护的代价。当索引的长度超过 16K 的长度限制时，建议将字符类型的字段长度缩减，或者将超长的字符类型字段从索引中剔除。

## 相关文档

关于 OceanBase 数据库的使用限制，请参阅 [使用限制](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000354626)。

上一篇

[全局唯一索引的分区表场景下基于 CDC 日志同步丢数的原因和解决方法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000001636797)

下一篇

[OceanBase 数据库 BLOB 列无法直接创建索引](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000207744) ![有帮助](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) 咨询热线
