【问题标题】:Using Guid as Id column in NHibernate causes format exception when using MySQL在 NHibernate 中使用 Guid 作为 Id 列在使用 MySQL 时会导致格式异常
【发布时间】:2010-01-26 19:19:55
【问题描述】:

当我定义 NHibernate 实体/映射以使用 Guid 作为标识列时,我收到一个异常。 Guid 列生成为 varchar(40),但内容似乎是二进制的。

有解决办法吗?现在我只是使用普通的 ol' int,但很高兴知道未来的项目! :)

【问题讨论】:

  • 有什么异常?您是否将列创建为 varchar(40) 或 NHibernate 是否生成了架构?
  • NHibernate 生成了它。我现在没有可用的例外,但它是关于格式的例外。

标签: mysql nhibernate guid


【解决方案1】:

MySql 连接器文档指出,从 .NET 连接器 5.2 版开始,他们将 GUID 视为 BINARY(16) 而不是 VARCHAR(40)。

由于当前在 nhibernate 中的 MySQL 方言没有更新以反映此更改(实际上 an issue 已准备好) 你需要手动转换这些 nhibernate 后到 BINARY(16) 的字段 生成架构。

【讨论】:

  • 过去几天我也遇到了同样的事情。这是一个真正的救生员。
【解决方案2】:

对此的另一个更新是最新的连接器使用 Char(36)

此选项是在 Connector/NET 6.1.1 中引入的。 GUID 类型的后端表示已从 BINARY(16) 更改为 CHAR(36)。这样做是为了允许开发人员使用服务器函数 UUID() 来填充 GUID 表 - UUID() 生成一个 36 个字符的字符串。旧应用程序的开发人员可以将“Old Guids=true”添加到连接字符串中,以便使用 BINARY(16) 数据类型的 GUID。

【讨论】:

    猜你喜欢
    • 2018-01-23
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多