Hibernate 使用InnoDB作为数据源在Grails域中指定索引前缀长度
在我的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中最近也遇到了同样的问题 我们过去常常把它存档。遵循文档中提供的安装步骤,然
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`;')
}
}
}
}