/ 数据复制服务 drs/ / / oracle到mysql迁移时,索引超长如何处理
更新时间:2024-11-26 gmt 08:00

oracle到mysql迁移时,索引超长如何处理-九游平台

索引长度说明

mysql引擎对索引长度有一些限制,最主要的因素就是存储引擎和字符集。不同的字符集,单个字符包含的最大字节数有所不同。例如utf8字符集,一个字符最多包含3个字节。而utf8mb4一个字符最多包含 4 个字节。
  • 如果是单字段索引,则字段长度不应超过表1中的“单字段最大字符数”。例如,mysql 5.7.6版本的innodb引擎,单字段索引不应超过767个字节(字符数=767/最大字节数)。
  • 如果是联合索引,则每个字段长度均不能超过表1中的“单字段索引最大字符数”,且所有字段长度合计不应超过“联合索引合计最大字符数”。例如,mysql 5.7.6版本的innodb引擎,每个字段索引不应超过767个字节(字符数=767/最大字节数),且所有字段索引长度总和不超过3072个字节(字符数=3072/最大字节数)。
表1 索引长度说明

引擎

mysql版本

字符集

最大字节数

单字段索引最大字符数

联合索引合计最大字符数

innodb

mysql 5.7.6及以下版本

utf8mb4

4

191

768

mysql 5.7.7及以上版本

utf8mb4

4

768

768

索引超长的处理方法

  • 方法一

    不迁移含有超长索引的表。

  • 方法二

    修改源库索引长度满足以上索引长度说明中的要求,该操作可能导致迁移后数据不完整,请谨慎使用。以目标库为mysql 5.7.6及以下版本的utf8mb4为例,可通过如下方式修改长度。

    alter table tablename modify columnname varchar2 (768) ;

其中,tablename请用实际表名代替,columnname请用实际列名代替。

  • 方法三

    在源库删除该索引及其约束。以目标库为mysql 5.7.6及以下版本的utf8mb4为例,可通过如下方式删除索引及其约束。

    drop index indexname;
    alter table tablename drop constraint constraintname;

    其中,indexname请用实际索引名代替,tablename请用实际表名代替,constraintname请用实际约束名代替。

相关文档

网站地图