所以我想这样做
Order.find :all, :conditions => "org = 'test org'"
最终解雇的是
SELECT * FROM `orders` WHERE (org = 'test org')
参数中的空格被剥离。我错过了什么..我真的难倒在这里。请帮忙!
答案 0 :(得分:2)
首先启用MySQL中的general query log,看看MySQL本身收到并执行的查询是否正确。
这是因为Rails将squeeze从其自己的查询日志中复制空白(在开发模式下运行时):
# /rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
def log_info(sql, name, ms)
if @logger && @logger.debug?
name = '%s (%.1fms)' % [name || 'SQL', ms]
@logger.debug(format_log_entry(name, sql.squeeze(' ')))
end
end
如果根据MySql查询日志本身发送给MySQL的查询仍然不正确,请再次尝试:
Order.find :all, :conditions => [ 'org = ?', 'test org' ]
答案 1 :(得分:1)
这不是rails的问题,而是mysql行为的一种方式。
例如:
mysql> select first_name from users where first_name = "George ";
+------------+
| first_name |
+------------+
| George |
| George |
+------------+
2 rows in set (0.00 sec)
这是修复它的一种方法:
mysql> select first_name from users where BINARY(first_name) = BINARY("George ");
Empty set (0.00 sec)
mysql> select first_name from users where BINARY(first_name) = BINARY("George");
+------------+
| first_name |
+------------+
| George |
| George |
+------------+
2 rows in set (0.00 sec)
祝你好运!