Поиск работает ненадлежащим образом, если вы ищете строку, содержащую символ фунта
Приложение, над которым я сейчас работаю, имеет функцию поиска. При поиске конкретной строки, например,. "4 за £3", который соответствует определенному столбцу строки таблицы, поиск не возвращает никаких результатов, хотя внутренняя БД правильно сохранила это значение в столбце для конкретной строки.
Журнал передает строку поиска как "4 для £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 для £7" как "2 для £7", а не "2 для \302\2437"?
Я проверил, что '\302' и '\243' являются восьмеричными эквивалентами, указанными на этой странице. Я также взглянул на похожий вопрос, но, похоже, он не помог мне.
Любые предложения о том, как я могу решить эту проблему, были бы очень полезны.
[Обновленный вопрос]
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
набор персонажей_Latin1
символьный_системный бинарный файл
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir / app (.. некоторый путь..)
Спасибо.
1 ответ
Похоже, ваша база данных хранит данные в utf8, а rails переводит их, используя другой набор символов (возможно, latin1). Добавьте эту строку в ваш раздел разработки в вашем config/database.yml
файл:
encoding: utf8
затем перезапустите сервер rails.