Rails:“UTF-8 中的字节序列无效”通过 UUID 设置 has_one 关联时出现异常

发布于 2024-10-18 21:54:42 字数 490 浏览 0 评论 0原文

环境:Ruby 1.9.2,Rails 3.0.1

两个MySQL表:1.items,2.vote_counts(每一行代表对某个item投票的用户数)

由于表很大,我需要对它们进行分片,所以我使用 UUID。 uuid 列在两个表中均定义:uuid varbinary(16) NOT NULL。

我在项目模型中定义了一个 has_one 关联: has_one :vote_count, :foreign_key => “uuid”,:primary_key => 当我调用item.vote_count

时,我在某些 UUID 值上遇到以下异常: “ArgumentError:UTF-8 中的字节序列无效”。

当然,原始 UUID 只是一个字节序列(编码:ASCII-8BIT),但是当 ActiveRecord 构造 SQL 查询时,它会尝试将其解释为 UTF-8 字符串。

我怎样才能告诉它只将字节序列传递给MySQL?

Environment: Ruby 1.9.2, Rails 3.0.1

Two MySQL tables: 1. items, 2. vote_counts (every row represents the number of users who voted on an item)

Since the tables are big and I need to shard them, I am using UUIDs. The uuid column is defined in both tables: uuid varbinary(16) NOT NULL.

I defined a has_one association in item model: has_one :vote_count, :foreign_key => "uuid", :primary_key => "uuid"

When I call item.vote_count, I am getting the following exception on some UUID values:
"ArgumentError: invalid byte sequence in UTF-8".

Of course the raw UUID is just a sequence of bytes (Encoding:ASCII-8BIT), but when ActiveRecord constructs a SQL query, it tries to interpret it as a UTF-8 string.

How can I tell it to just pass the byte sequence to MySQL?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

回首观望 2024-10-25 21:54:42

您是否使用类似的方法

UUIDTools::UUID.random_create.hexdigest[0, 8]

来生成 UUID?

我们使用它,并使用 mysql 和 postgres 数据库将其分配给模型中的字符串字段。注意:我们不使用它们作为密钥。就像模型中的常规字段一样。

Are you using something like

UUIDTools::UUID.random_create.hexdigest[0, 8]

to generate the UUID?

We use this and we assign it to a string field in our models using both mysql and postgres DBs. note: we are not using them as keys. Just as regular fields in the model.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文