我有一个试图将照片保存到数据库的应用程序。我创建了一个带有byte []属性的grails域类,这在使用HSQLDB(grails中的默认值)时运行良好。但是,当我将数据库更改为MySQL时,我最终收到以下错误:
Data truncation: Data too long for column 'photo' at row 1
然后我查看了模式,发现byte []被创建为TINYBLOB字段,导致错误。
如何指定此属性应与数据库中的BLOB / LONGBLOB类型对应?
答案 0 :(得分:4)
您应该可以通过添加mapping
闭包来管理它:
static mapping = {
photo type: "binary" // or "blob"?
}
文档在这里:http://grails.org/doc/latest/ref/Database%20Mapping/type.html
Hibernate类型在这里:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-types-basictypes
还有一个sqlType
属性,我相信它是指底层数据库类型,而不是hibernate的数据库不可知类型抽象:
static mapping = {
photo column: "photo_data", sqlType: "blob"
}
此处的文档如下: http://grails.org/doc/latest/ref/Database%20Mapping/column.html
答案 1 :(得分:2)
为该字段创建一个包含maxSize的约束。
static constraints = {
photo(maxSize: 102400) // 100Kb
}