【发布时间】:2012-08-15 21:11:46
【问题描述】:
我是 Grails 的新手,我正在使用带有 MySQL 5.5 后端的 Grails 2.1 来构建一个示例项目来学习。
我安装了 JodaTime 1.4 插件,然后运行grails install-joda-time-templates
但是,当我将域类字段声明为 org.joda.time.DateTime 类型时,尝试保存新条目时出现错误。
为了隔离问题,我创建了一个简单的域类:
import org.joda.time.DateTime
class Project
{
String name
DateTime startDate
static constraints = {
name(blank: false, maxSize: 50)
startDate(validator: {return (it > new DateTime())})
}
}
控制器只是将脚手架设置为使用域类。
我的 DataSource.groovy 指定 dbCreate = "create-drop",因为我让 Grails 创建表。
这是我尝试保存时遇到的错误:
Class:com.mysql.jdbc.MysqlDataTruncation
Message:Data truncation: Data too long for column 'start_date' at row 1
当我查看 Grails 创建的 MySQL 数据库中的 project.start_date 列时,类型是 TINYBLOB。
我的想法是 TINYBLOB 可能不足以存储 JodaTime DateTime 字段的数据。
有谁知道如何让 Grails 创建合适的类型?
非常感谢。
【问题讨论】:
-
你检查过 Joda Time 插件吗? grails.org/plugin/joda-time
-
@SérgioMichels,我做到了,我在 Data Binding 和 Scaffolding 上完成了 Grails 章节的 JodaTime 集成,但没有找到一种方法可以强制 JodaTime DateTime 映射到特定的MySQL 类型。
-
你可以试试静态映射 = { startDate sqlType:'timestampt' } 吗?
-
@Sérgio Michels 谢谢你的这个想法。我试过了,它确实导致由 Grails 创建的 MySQL 表/列具有一种时间戳。当我转到 MySQL Workbench 时,我看到了时间戳类型的 project.start_date。但是,我坚持的时候还是报错,这是一个新的错误:
Class:com.mysql.jdbc.MysqlDataTruncation Message:Data truncation: Incorrect datetime value: '’' for column 'start_date' at row 1
标签: mysql grails grails-orm