首页 > 解决方案 > 如何限制 Liquibase 和 MySQL 中的文本索引

问题描述

当你有 chengeset 时:

<changeSet id="some.change.set" author="me">
    <createTable tableName="some_table">
        <column name="id" type="CHAR(36)">
            <constraints primaryKey="true"/>
        </column>
        <column name="ref_id" type="CHAR(36)">
            <constraints nullable="false"/>
        </column>
        <column name="path" type="VARCHAR(5000)"> <!-- very long column -->
            <constraints nullable="false"/>
        </column>
    </createTable>
    
    <createIndex tableName="some_table" indexName="some_table_long_index">
        <column name="ref_id" />
        <column name="path" />
    </createIndex>
</changeSet>

当您执行它时,您将收到类似于以下内容的错误:

Error Code: 1071. Specified key was too long; max key length is 3072 bytes

发生这种情况是因为您的索引太长。你必须限制它。

标签: mysqlindexingsizeliquibase

解决方案


要限制我们的索引,您需要对其进行大小限制。不幸的是 Liquibase 不支持它,但有一个解决方法:

    <createIndex tableName="some_table" indexName="some_table_long_index">
        <column name="ref_id"/>
        <column name="path"/>
    </createIndex>
    <modifySql dbms="mysql">
        <replace replace="`path`" with="`path`(700)"/> <!-- "700" limits index size -->
    </modifySql>

我已经搜索了很长时间,所以我将解决方案放在这里。也许它会对某人有所帮助。


推荐阅读