如果查找包含井号的字符串,则搜索工作不当

时间:2014-04-28 11:18:45

标签: ruby-on-rails ruby encoding character-encoding pound

我目前正在处理的应用具有搜索功能。搜索特定字符串时,例如。 “4 for£3”匹配表行的特定列,但搜索不会返回任何结果,尽管后端DB已将其正确存储为特定行的列中的值。

日志将搜索字符串传递为“4 for£3”。我不确定附加的'Â'字符会从何处附加到我的搜索字符串(search_str)。我尝试了以下解决方法从后端搜索确切的字符串,但它似乎不起作用 -

解决方法 -

params[:search_str].include?('Â') ? params[:search_str].gsub!('£', '£') : 

另外,只是在IRB中尝试同样的事情时,我会得到以下内容 -

irb(main):020:0> a = "2 for £7"
=> "2 for \302\2437"
irb(main):021:0>

irb(main):013:0> a.include?('Â')
=> true

在Rails中执行时,相同的命令在从视图文件中单击的搜索按钮调用操作时返回false。不知道为什么会出现这种异常行为,可能是因为Rails将“2 for£7”视为“2 for£7”而不是“2 for \ 302 \ 2437”?

我确认'\ 302'和'\ 243'是this page中给出的八进制等值。我也看过similar question,但它似乎对我的情况没有帮助。

关于如何解决这个问题的任何建议都会非常有用。

[更新的问题]

database.yml是 -

development:
  adapter: mysql
  database: db_name 
  username: 
  password: 
  host: localhost 

dev-rails:
  adapter: mysql
  database: 
  username: 
  password: 
  host: 
  port: 

dev-delayedjobs:
  development

test:
  adapter: mysql
  database: db_name
  username: 
  password:  
  host: 
  port:  

结果作为查询的一部分返回 - show variables like 'char%';

character_set_client utf8

character_set_connection utf8

character_set_database latin1

character_set_filesystem binary

character_set_results utf8

character_set_server latin1

character_set_system utf8

character_sets_dir / app(.. some path ..)

谢谢。

1 个答案:

答案 0 :(得分:0)

听起来您的数据库正在将数据存储在utf8中,而rails正在使用不同的字符集(可能是latin1)进行翻译。将此行添加到config/database.yml文件的开发部分:

encoding: utf8

然后重新启动rails服务器。