我目前正在处理的应用具有搜索功能。搜索特定字符串时,例如。 “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 ..)
谢谢。
答案 0 :(得分:0)
听起来您的数据库正在将数据存储在utf8中,而rails正在使用不同的字符集(可能是latin1)进行翻译。将此行添加到config/database.yml
文件的开发部分:
encoding: utf8
然后重新启动rails服务器。