2014-04-28 2 views
0

현재 작업중인 앱에 검색 기능이 있습니다. 예를 들어 특정 문자열을 검색 할 때. 테이블 행의 특정 열과 일치하는 "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 

레일에서 실행될 때 검색 버튼 뷰 파일에서 클릭에서 작업을 호출 할 때 false를 반환 같은 명령 -, 나는 다음과 같은 얻을. 이 비정상적인 동작이 왜 Rails가 "7"에 대해 2를 "7에 대해 2"로 취급하고 "302에 대해 2"가 아닌 2437을 처리하기 때문에 그런 것일까?

'\ 302'와 '\ 243'이 (가) this page에 주어진 8 진수 상당임을 확인했습니다. 나도 similar question를 보았다. 그러나 그것은 나의 경우를 돕는 것처럼 보이지 않았다.

내가이 문제를 어떻게 극복 할 수 있는지에 대한 제안은 정말 도움이 될 것입니다.

[업데이트 질문]

database.yml을이 - show variables like 'char%';

해서 character_set_client의 UTF8

character_set_connection을의 UTF8

-

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: 

결과 쿼리의 일부로 반환

character_set_database 라틴

character_set_filesystem 진

character_set_results의 UTF8

character_set_server 라틴

character_set_system의 UTF8

character_sets_dir/응용 프로그램 (.. 어떤 경로 ..)

감사합니다.

+0

당신은 DB가 값을 올바르게 저장하고 있지만 문제는 검색 중임을 말했습니다. 'get'은 어떨까요? ('select * from MY_DB') - 정확한 값입니까? – dax

+0

장난 꾸러기 검색! – Santhosh

+0

예를 들어 mysql 워크 벤치를 통해 my_db에서 sel *을 실행하는 경우 올바른 값을 반환합니다. 그러나 브라우저 웹 페이지에 표시 할 때 한 페이지에서 파운드 기호가 적절하게 표시되지만 다른 페이지에서는 파운드 기호가 표시되는 대신 기호가 표시됩니다. 파운드 기호가 올바르게 표시되는 곳의 페이지 소스 코드는' 2 for £3 '입니다. 그것이 제대로 표시되지 않는 곳은 소스 코드가 있습니다. - <3 td width = 150px> 2, 3의 경우 – boddhisattva

답변

0

데이터베이스가 utf8에 데이터를 저장하고 있고 레일스가 다른 문자 집합 (아마도 latin1)을 사용하여 데이터를 변환하고있는 것 같습니다. 이 섹션을 config/database.yml 파일의 개발 섹션에 추가하십시오.

그런 다음 레일 서버를 다시 시작하십시오.

+0

그냥 요즘은 인코딩 : utf8 database.yml에서 관찰했다 .. ' '는 '�/2'로 바뀝니다. 이 경우 적어도 이전 인코딩을 사용하기 위해 수행 할 수있는 아이디어. 나는 encoding : utf8을 순간적으로 database.yml에 없앨 수는 없다. 시스템의 검색 기능에 사용되고 있기 때문이다. – boddhisattva

+0

이것은 내가 오랫동안 대화를 한 다른 질문과 비슷하다. 거기에있는 포스터 중 하나에는 모든 올바른 옵션을 설정하고 모든 기존 데이터를 변환하여 utf8을 제대로 사용할 수 있습니다. 그것이 도움이되는지 확인하십시오 - http://stackoverflow.com/questions/22563225/utf8-data-looks-fine-in-mysql-but-is-broken-in-rails –

+0

감사합니다 맥스, 우리는 여전히 고치고 있습니다. 이 문제에 대해서. – boddhisattva

관련 문제