mysql中grails byte[]属性的数据类型错误
我有一个应用程序,它正试图保存一张照片到数据库。我创建了一个带有byte[]属性的grails域类,在使用HSQLDB(grails中的默认值)时,该类运行良好。但是,当我将数据库更改为MySQL时,我最终得到以下错误:mysql中grails byte[]属性的数据类型错误,mysql,grails,types,Mysql,Grails,Types,我有一个应用程序,它正试图保存一张照片到数据库。我创建了一个带有byte[]属性的grails域类,在使用HSQLDB(grails中的默认值)时,该类运行良好。但是,当我将数据库更改为MySQL时,我最终得到以下错误: Data truncation: Data too long for column 'photo' at row 1 然后我查看了模式,发现字节[]被创建为TINYBLOB字段,这导致了错误 如何指定此属性应与数据库中的BLOB/LONGBLOB类型相对应?您应该能够通过添加
Data truncation: Data too long for column 'photo' at row 1
然后我查看了模式,发现字节[]被创建为TINYBLOB字段,这导致了错误
如何指定此属性应与数据库中的BLOB/LONGBLOB类型相对应?您应该能够通过添加一个类似以下内容的
映射来管理该属性:
static mapping = {
photo type: "binary" // or "blob"?
}
文件如下:
休眠类型如下:
还有一个sqlType
属性,我认为它指的是底层数据库类型,而不是hibernate的数据库不可知类型抽象:
static mapping = {
photo column: "photo_data", sqlType: "blob"
}
相关文件如下:
为该字段创建一个maxSize约束
static constraints = {
photo(maxSize: 102400) // 100Kb
}
谢谢你。第二种方法,显式指定'sqlType'有效。第一种方法,将类型设置为“binary”,仍然会导致列为TINYINT类型(并给出与以前相同的错误)。您可能会发现该字段不再针对其他数据库工作,因为您绕过了Hibernate的类型抽象,但这可能无关紧要。它对HSQL有效吗?我们正好遇到了这个问题,所以我可以回答我自己的问题:指定sqlType='blob'
在HSQL中不起作用。它失败,错误为hbm2ddl.SchemaExport-错误的数据类型:语句中的BLOB[创建表映像(id bigint默认生成为标识(以1开头),版本bigint not null,数据BLOB]
。