首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Rails中比较SQLite与MySQL查询结果时不同类型的数据

问在Rails中比较SQLite与MySQL查询结果时不同类型的数据
EN

Stack Overflow用户
提问于 2011-03-01 04:36:29
回答 2查看 573关注 0票数 1

我正在寻找对以下具有活动记录的查询结果的解释:

代码语言:javascript
复制
date_range = (Date.today - 7)..(Time.now.to_datetime)
r = Report.find(:all, :conditions => {:created_at => date_range},
                      :group => 'date(created_at)',
                      :select => 'date(created_at) as day, count(id) as counter') 

基本上,我只是在表"reports“中计算结果,但是我得到了命名字段”计数器“的不同类型的值,双引号的数组与仅为数字的数组。

MySQL

如果使用MySQL,

代码语言:javascript
复制
r.map(&:counter)

返回:

=> "3“、"3”、"5“、"4”、"4"

SQLite

如果使用SQLite,

代码语言:javascript
复制
r.map(&:counter)

返回:

=> 3,3,5,4,4

MySQL用引号(String)和SQLite数返回数字是正确的吗?我希望这两个都只返回整数。还是我缺少了一些MySQL侧的配置?

编辑:

以防万一,使用普通迁移创建的两个DB,因此所有字段都是等效类型。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-01 14:12:57

这是SQLite ActiveRecord适配器中的一个bug。

当您使用"SELECT expr col_name“合成新列值时,col_name将转换为字符串,而不是正确的数据类型(在本例中为int)。

参见相关的Rails bug票证:https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/4544-rails3-activerecord-sqlite3-lost-column-type-when-using-views#ticket-4544-2

显然,SQLite不能为视图返回正确的列类型值,这是在合成这样的属性时使用的机制。

票数 1
EN

Stack Overflow用户

发布于 2014-04-23 22:25:28

使用底层连接来执行我的SQL语句,我也遇到了同样的问题。

但是,我注意到,如果您在exec_sql语句中使用绑定,数据类型将如预期的那样返回。

例如。

代码语言:javascript
复制
ActiveRecord::Base.connection.exec_sql("select * from users where id = 35") 

结果:

ActiveRecord::结果:0x7fa2c6ede200 @columns="id“、"name”、@hash_rows=nil、@rows=["35“、"FOO"]

然而,

代码语言:javascript
复制
ActiveRecord::Base.connection.exec_sql("select * from users where id = ?", nil, [[nil,35]]) 

结果:

ActiveRecord::结果:0x7fa2c6ede200 @columns="id“、"name”、@hash_rows=nil、@rows=[35,"FOO"]

注意,35的数据类型是整数!希望这能有所帮助。

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

https://stackoverflow.com/questions/5150498

复制
相关文章

相似问题

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