使用 uuid 的 Elixir Postgrex

Tan*_*ano 5 elixir

我正在为我的数据库使用 Postgrex 库,但我有以下问题:数据库中的列之一的类型为uuid. 我正在使用灵药的UUID模块,但每当我试图坚持一些东西到数据库中,我得到以下错误:Postgrex expected a binary of 16 bytes, got "3c5fda26-ea3b-4c77-8f19-06e106a61eda"。我试图将它存储为普通字符串,但正如您所见,这是不可能的。在将 uuid 持久化到数据库之前,我应该如何转换它?

Hau*_*eth 5

UUID 是一个字符串,但不是“人类可读的字符串”。您看到的3c5fda26-ea3b-4c77-8f19-06e106a61eda不是UUID,它只是人类可能可读的表示形式之一。您需要的是传递直接的内部 UUID 表示形式,它实际上是 16 字节的二进制形式。要将字符串从十六进制表示形式解析为二进制表示形式,您可以使用Ecto.UUID.dump/1.


Tan*_*ano 5

我刚刚发现 UUID 模块已经有一个名为 的函数UUID.string_to_binary!,最好使用这个函数而不是 Ectos',因为我根本不使用 Ecto