Hibernate 使用InnoDB作为数据源在Grails域中指定索引前缀长度

Hibernate 使用InnoDB作为数据源在Grails域中指定索引前缀长度,hibernate,grails,gorm,Hibernate,Grails,Gorm,在我的Grails域中,我目前拥有 String value static constraints = { value(blank: false, size: 1..400) } static mapping = { value index: 'value_Idx' } 我的数据源是MySQL InnoDB,它的最大索引长度为 使用UTF-8意味着最多255个字符,这意味着必须使用前缀索引 在MySQL中最近也遇到了同样的问题 我们过去常常把它存档。遵循文档中提供的安装步骤,然

在我的Grails域中,我目前拥有

String value
static constraints = {
    value(blank: false, size: 1..400)
}
static mapping = {
    value index: 'value_Idx'
}
我的数据源是MySQL InnoDB,它的最大索引长度为

使用UTF-8意味着最多255个字符,这意味着必须使用前缀索引


在MySQL中最近也遇到了同样的问题

我们过去常常把它存档。遵循文档中提供的安装步骤,然后创建一个新的changelog
grails app/migrations/add前缀索引。groovy
例如:

databaseChangeLog = {
    changeSet(author: "authot", id: "addPrefixedIndex") {
        grailsChange {
            change {
                sql.execute('ALTER TABLE `table` ADD INDEX `value_Idx`(`value`(255));')
            }

            rollback {
                sql.execute('ALTER TABLE `table` DROP INDEX `value_Idx`;')
            }
        }
    }
}
不要忘记将新文件包括在主数据库更改日志中:
include文件:“add prefixed index.groovy”

然后运行
grailsdbmupdate
并创建新索引

ERROR hbm2ddl.SchemaUpdate - Unsuccessful: create index value_Idx on table (value)
ERROR hbm2ddl.SchemaUpdate - Index column size too large. The maximum column size is 767 bytes. 
databaseChangeLog = {
    changeSet(author: "authot", id: "addPrefixedIndex") {
        grailsChange {
            change {
                sql.execute('ALTER TABLE `table` ADD INDEX `value_Idx`(`value`(255));')
            }

            rollback {
                sql.execute('ALTER TABLE `table` DROP INDEX `value_Idx`;')
            }
        }
    }
}