【问题标题】:How do I map a fixed length string to Postgresql using GORM?如何使用 GORM 将固定长度的字符串映射到 Postgresql?
【发布时间】:2014-06-01 20:36:59
【问题描述】:

我有一个 9 字符的字符串,我想将其作为字符 (9) 存储在 Postgresql (9.3) 中。同样重要的是,我希望它能够正确验证数据库是否正确,而这并没有发生。我正在使用使用 Hibernate 工具的数据库迁移插件生成模式。到目前为止,这是我尝试过的:

static mapping = {
    poleID column: "pole_id", sqlType: "character", length: 9
}

这正是它在数据库中创建的方式,但是当我执行 dbm-gorm-diff 时,它会尝试修改列:

changeSet(author: "phil (generated)", id: "1401652394765-3") {
    modifyDataType(columnName: "pole_id", newDataType: "character", tableName: "unit")
}

你可以看到长度被忽略了。我也尝试用以下方式指定它:

static mapping = {
    poleID column: "pole_id", sqlType: "character(9)"
}

它再次尝试将已经正确的列修改为字符(9)。如何指定映射以便它看到数据库已经正确?

【问题讨论】:

  • 考虑使用varchar 并添加一个CHECK (length(mycol) = 9) 约束。 character 是一种奇怪的数据类型,一般不值得使用。
  • 感谢 Craig,我看到我错过了 PG 没有为在 varchar 上使用字符提供任何性能改进的细则(而且自动填充空白也不是我想要的)。

标签: postgresql grails grails-orm liquibase hibernate-tools


【解决方案1】:

我刚刚在 MySQL 和 grails 2.3.7 上遇到了类似的问题 - 我尝试使用

sqltype: 'char', length: 128, 

但长度被忽略,模式导出将其显示为“字符”。在 MySQL 中,char 与 varchar 很重要,所以我通过指定来解决它

sqltype: 'char(128)'

我认为这只是 Grails 中的一个错误 - 除非有人明确表示不希望这样做(但应该更好地记录它)。

【讨论】:

  • 听起来长度仅适用于 varchar。问题是,当您使用 char(128) 并且数据库正确时,它是否会尝试修改类型?这可能是 Hibernate 工具而不是 Grails 的问题,因为我认为前者用于 Grails 和数据库迁移插件生成模式。
猜你喜欢
  • 2019-10-30
  • 2013-07-09
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多