Rails property :name, Object,保存什么类型的数据到数据库呢

wdxiaomomo · 2014年07月08日 · 最后由 wdxiaomomo 回复于 2014年07月09日 · 2294 次阅读

1.src_ips 字段在 model 中的定义 class Cache property :src_ips, Object end 定义的是 Object 类型,save 的时候,往数据库插入的数据是什么类型的? 2.在数据库中的类型 cache 表中,src_ips 字段的类型是:MEDIUMTEXT 保存的是一堆字符,这堆字符是二进制流?还是什么格式的数据呢。 3.在控制台可以得到数据 在控制台可以将 src_ips 的真实内容读出来。是一个 hash 4.问题。 现在想要用 php 将数据库中的 src_ips 数据读出来,现在不确定数据库中保存的是一堆什么类型的数据,自己看了好久源代码,没有看出来。 求大神帮忙啊。

环境是:ruby2.0+rails3.1.12

irb> a = { title: 1, name: 'foo' }
irb> b = [ Marshal.dump(a) ].pack("m")
 => "BAh7BzoKdGl0bGVpBjoJbmFtZUkiCGZvbwY6BkVU\n"
irb> Marshal.load(b.unpack("m").first)
 => {:title=>1, :name=>"foo"}

关于 pack("m") http://www.ruby-doc.org/core-2.1.2/Array.html#pack-method

base64 encoded string (see RFC 2045, count is width) (if count is 0, no line feed are added, see RFC 4648)

看起来等于 Base64.encode64

irb> require "base64"
irb> c = Base64.encode64(Marshal.dump(a))
 => "BAh7BzoKdGl0bGVpBjoJbmFtZUkiCGZvbwY6BkVU\n" 
irb> c == b
 => true

#2 楼 @huacnlee 想问一下,在这为什么要用 base64 处理一下呢?pack 和 unpack 都是要花资源的啊,在这又不涉及传输,符号和其它字符应该不是问题吧。

#3 楼 @Peter 那个我不知道 DataMapper 为何要哪样做,另外 pack 其实很快的

#2 楼 @huacnlee 我试了一下,完全一致的。太谢谢你了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号