首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails:使用BINARY值查询binary列不返回任何内容

Rails:使用BINARY值查询binary列不返回任何内容
EN

Stack Overflow用户
提问于 2011-12-21 02:35:35
回答 1查看 3.2K关注 0票数 0

我有一个包含256位校验和的二进制列。我可以存储校验和,但是当我尝试通过校验和进行查询时,什么也没有返回。

代码语言:javascript
复制
d = Digest::SHA2.new
d.update "large str i'm creating the hash with"
begin
    codebase = Codebase.find_or_create_by_checksum(d.digest)
rescue ActiveRecord::StatementInvalid => e
    # handle duplicate record error
end

我尝试过where和不同版本的find。什么都不会返回。当我使用find_or_create_by_checksum时,因为它没有找到任何东西,所以它会尝试创建它,并且会引发异常,因为我在校验和列上有一个uniq索引,但我仍然需要能够获得具有匹配校验和的记录。

代码语言:javascript
复制
    create_table :codebases do |t|
        t.binary :checksum, :null => false, :limit => 32
    end

    add_index :codebases, :checksum, :unique => true, :name => 'name_of_the_codebas_uniq_index'

有人知道怎么做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-21 02:51:40

所以如果它在数据库中是二进制的,我就不能重现:

迁移:

代码语言:javascript
复制
class Checksum < ActiveRecord::Migration
  def up
    create_table :checksums do |t|
        t.binary :checksum, :null => false, :limit => 32
    end
  end

  def down
  end
end

然后在rails控制台上尝试:

代码语言:javascript
复制
ruby-1.9.2-p290 :009 > Checksum.create(:checksum => digest.digest)
  SQL (0.4ms)  INSERT INTO "checksums" ("checksum") VALUES (?)  [["checksum", ",&\xB4kh\xFF\xC6\x8F\xF9\x9BE<\x1D0A4\x13B-pd\x83\xBF\xA0\xF9\x8A^\x88bf\xE7\xAE"]]
 => #<Checksum id: 1, checksum: ",&\xB4kh\xFF\xC6\x8F\xF9\x9BE<\x1D0A4\x13B-pd\x83\xBF\xA0\xF9\x8A^\x88bf\xE7\xAE"> 

ruby-1.9.2-p290 :010 > Checksum.first
  Checksum Load (0.2ms)  SELECT "checksums".* FROM "checksums" LIMIT 1
 => #<Checksum id: 1, checksum: ",&\xB4kh\xFF\xC6\x8F\xF9\x9BE<\x1D0A4\x13B-pd\x83\xBF\xA0\xF9\x8A^\x88bf\xE7\xAE"> 

ruby-1.9.2-p290 :011 > Checksum.find_by_checksum(digest.digest)
  Checksum Load (0.1ms)  SELECT "checksums".* FROM "checksums" WHERE "checksums"."checksum" = x'2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae' LIMIT 1
 => #<Checksum id: 1, checksum: ",&\xB4kh\xFF\xC6\x8F\xF9\x9BE<\x1D0A4\x13B-pd\x83\xBF\xA0\xF9\x8A^\x88bf\xE7\xAE"> 

所以它能像预期的那样工作……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8580250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档