Sai*_*Sai 11 mysql activerecord timestamp ruby-on-rails
Rails的:timestamp
列类型在于; 它实际上只是一个别名:datetime
.
我正在使用mysql,我想使用实际的unix-timestamp TIMESTAMP
列.
a)有没有一种很好的方法来设置它,除了使用SQL创建列?
b)ActiveRecord是否会正确处理它(例如转换到Time
必要时,接受unix时间戳Integer
作为输入等)?我应该期待得到什么,以及在哪里?
为什么:
速度.这是一个非常活跃的表,它聚合了已经使用unix时间戳的外部数据源.转换为datetime(甚至首先转换为db字符串,经过2 gsub
秒)会占用其大部分导入时间.否则我可以做一个便宜的Integer#to_s
电话.
时区.我不想要他们.我希望它存储时区 - 非常地存储; 处理时区是一种痛苦,除了在个人用户显示之前的最后阶段,与我的需求完全无关.数据本身无需知道记录的时区.
尺寸.这是一张大桌子.TIMESTAMP的大小是DATETIME的一半.
是的,我仍然会updated_at
在代码中进行计算,而不是mysql.那部分不是瓶颈.
为什么你的'为什么不'是错的(先前说明,我不是要求出于无理由的原因:-P):
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter#quote
(在Quoting#quoted_date
[如果通过Time
]或Mysql2Adapter#quote_string
[如果预转换to_s(:db)
])实际上是我的刮刀中耗费大量CPU的部分.我想摆脱它.这工作(只是将空白字符添加到类型定义,所以:timestamp不会覆盖它):
t.add_column :sometable, :created_at, 'timestamp '
Run Code Online (Sandbox Code Playgroud)
小智 0
我很菜鸟,但我会尝试一下。如果您要添加自己的自定义列或覆盖默认列怎么办?您可以将自定义数据类型与字符串一起使用,如下所示:
t.add_column :mysql_timestamp, 'timestamp'
Run Code Online (Sandbox Code Playgroud)
然后在你的逻辑中的其他地方
def mysql_timestamp
Time.now.strftime("%Y-%m-%d %H:%M:%S")
end
Run Code Online (Sandbox Code Playgroud)
不确定 b)。只有一种方法可以找出答案!
归档时间: |
|
查看次数: |
3019 次 |
最近记录: |