7

我需要使用现有的(MySql)数据库,其中已经定义了表和列的名称。

如果我正确理解了文档(并且我没有找到关于这个主题的好的文档,所以链接将受到高度赞赏),表名与 PersistIdentity 相关,因此必须以大写字母开头(我不是这种情况)米面对)。

但是,列名自动不大写(至少在 Yesod 书 Persistent 一章中描述从声明自动生成的代码的代码片段中暗示了这一点),因此 DB 中的列必须以小写字母开头。

上面的描述是真的吗?

我可以专门控制表到身份和列到字段的映射吗?如果不是,那么命名自动应用的规则是什么?因此,哪些名字是被禁止的?

此外,其中一个字段是 VARCHAR(30)。我如何将其传达给 Persistent?它目前抱怨(通过yesod devel):

errMessage = "BLOB/TEXT 列 'my_field' 用于在没有密钥长度的密钥规范中"}

这是自动迁移的结果(我可能应该禁用它)。但是,如果我确实想声明一个有界 VARCHAR 字段 - 我可以通过 Persistent 及其自动迁移工具来做到这一点吗?

谢谢,

4

1 回答 1

6

我不是 MySQL 后端的权威,但是 IIRC(并且基于代码),您可以通过使用maxlen=...属性来控制最大长度。同样,您可以使用sql=...属性直接控制该字段在数据库中的名称。因此,例如,以下可能有效:

Person sql=people
    name Text sql=full_name maxlen=40
    age Int

我也同意,如果您正在处理预先存在的模式,您应该禁用自动迁移代码。

于 2012-05-03T13:04:57.127 回答