,所以我試圖做到這一點條件與ActiveRecord的空格找到
Order.find :all, :conditions => "org = 'test org'"
什麼結束了射擊是
SELECT * FROM `orders` WHERE (org = 'test org')
在爭論中的空白被剝離。我錯過了什麼..我真的很難過這裏。請幫忙!
,所以我試圖做到這一點條件與ActiveRecord的空格找到
Order.find :all, :conditions => "org = 'test org'"
什麼結束了射擊是
SELECT * FROM `orders` WHERE (org = 'test org')
在爭論中的空白被剝離。我錯過了什麼..我真的很難過這裏。請幫忙!
首先打開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' ]
這不是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)
祝你好運!
這也正是使用'LIKE'尊重空白的MySQL有據可查的特質,其中的'='不:https://bugs.mysql.com/bug.php?id = 64772 –