Поиск работает ненадлежащим образом, если вы ищете строку, содержащую символ фунта

Приложение, над которым я сейчас работаю, имеет функцию поиска. При поиске конкретной строки, например,. "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.

Другие вопросы по тегам