使用utf8mb4编码的Grails3和MySql

使用utf8mb4编码的Grails3和MySql,mysql,hibernate,grails,gorm,grails-3.0,Mysql,Hibernate,Grails,Gorm,Grails 3.0,读了一篇文章后,我意识到将MySql编码完全转换为utf8mb4是有意义的。但是,它会给索引键带来问题,因为它们不应该超过191个字符(utf8mb3中为255个)。默认情况下,Grails字符串由gorm映射到VARCHAR(255),这对于utf8mb3很好。但是对于utf8mb4,我如何将其更改为VARCHAR(191) 我找到的唯一解决方案是设置全局默认约束,强制所有字符串映射到VARCHAR(191)。问题是,它显然会影响所有字符串的约束,这在我的例子中是不需要的 grails.gor

读了一篇文章后,我意识到将MySql编码完全转换为utf8mb4是有意义的。但是,它会给索引键带来问题,因为它们不应该超过191个字符(utf8mb3中为255个)。默认情况下,Grails字符串由gorm映射到VARCHAR(255),这对于utf8mb3很好。但是对于utf8mb4,我如何将其更改为VARCHAR(191)

我找到的唯一解决方案是设置全局默认约束,强制所有字符串映射到VARCHAR(191)。问题是,它显然会影响所有字符串的约束,这在我的例子中是不需要的

grails.gorm.default.constraints = {
    // set maxSize to 191 as we use MySql utf8mb4 whhich limits columns to 191 when used as indexes
    '*'(maxSize: 191)
}
有没有办法影响VARCHAR长度。也许使用类似用户类型的东西

grails.gorm.default.mapping = {
    'user-type'(type: my.custom.ZoneIdUserType, class: ZoneId)
}

或者有没有更好的方法来处理MySql和Grails的完整UTF-8编码?

191只是暂时的问题。(“临时性”,因为它是在5.5天内创建的,然后在5.7中默认最终修复。)

191=767/3

同时,这里有5个变通方法: