如何在rails postgresql数据库中创建BLOB列

baa*_*h05 6 postgresql blob ruby-on-rails heroku

我正在尝试将二进制数据存储在数据库中.(关于heroku的postgresql)

据我所知,有两种不同的方法可以在postgresql中存储二进制数据.blob和bytea ..

当我在迁移中创建表时,

create_table :binaries do |t|
  t.binary :data
end
Run Code Online (Sandbox Code Playgroud)

它在bytea类型的数据库中创建一个列.

我的问题是..如何创建blob类型的记录?

我为什么这么问?似乎当我发送一个十字节文件到heroku时,它将它存储为一个十六进制值的字符串,前面带有"e"..所以我的10个字节变为21.我的10兆字节文件将变为20兆(和一个字节) ),分机,分机,分机......
现在困扰我,但因为我并不真正关心性能.(我已经被PM打败了我),这不是最困扰我的.
真正困扰我的是; 当我读出数据库的内容时,我得到21个字节,而不是10.这是不可用的.

所以我的问题再次出现..如何在rails/postgresql/heroku环境中创建BLOB列?

mu *_*ort 10

bytea是PostgreSQL的BLOB版本.从精细手册:

SQL标准定义了一个不同的二进制字符串类型,称为BLOBBINARY LARGE OBJECT.输入格式不同bytea,但提供的函数和运算符大致相同.

bytea就是你想要的.就格式而言:

bytea类型支持两种输入和输出的外部格式:PostgreSQL的历史"转义"格式和"十六进制"格式.输入时始终接受这两个.输出格式取决于配置参数bytea_output; 默认值为十六进制.(注意,在PostgreSQL 9.0中引入了十六进制格式;早期版本和一些工具不理解它.)

所以你所看到的只是用于将数据导入数据库和数据库之外的文本版本.

这也可能是有趣的: