在activerecord中找到具有空格的条件

时间:2010-03-09 03:58:07

标签: ruby-on-rails ruby activerecord

所以我想这样做

Order.find :all, :conditions => "org = 'test     org'"

最终解雇的是

SELECT * FROM `orders` WHERE (org = 'test org')

参数中的空格被剥离。我错过了什么..我真的难倒在这里。请帮忙!

2 个答案:

答案 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)
祝你好运!