Grails GORM 自动建表失败,且无错误提示信息

14 篇文章 0 订阅

今天遇到一个情况,GORM 根据 class 自动建表失败,且没有任何提示信息。

造成建表失败的原因是 varchar 类型字段的 maxSize*3 超过了 mysql varchar 字段最大字节数。
为什么要乘以3呢?因为 mysql 类型长度是按字节算,而varchar长度是按字符算的,所以 varchar(1) 实际占用的字节长度是3(如果数据库编码是 utf-8 的话)。

因为 mysql varchar 最大字节长度是 65535,因此 varchar 最大字符长度是 65535/3 = 21845。

造成错误的代码:

class Trade {
	String orderString
	static constraints = {
		orderString maxSize: 1024*10
	}
}

这估计是 GORM 的一个bug,因为按照文档,GORM 应该自动调整 orderString 的 mapping,变成 text sql 类型的字段才对。

我们需要给 grails 提一个 bug issue。

解决办法:

  • 指定 column 的 sqlType: “text” 即可
class Trade {
	String orderString
	static mapping = {
		orderString sqlType: "text"
	}
	static constraints = {
		orderString maxSize: 1024*10
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值