PostgreSQL 데이터베이스를 사용하여 perl 및 dojo에서 웹 페이지를 만들었습니다. 나는 데이터베이스에서 availale 사람들을 검색해야하고 덴마크에서 메신저 이후 편지 æ, ø 및 å 검색에서 사용할 수 있어야합니다. 나는 이것이 UTF8을 사용할 때 표준이라고 생각했고, PHP로 mysql을 통해 정상적으로 프로그램 할 때 그것이 그렇게 힘들지 않을 것이라고 생각했다.PostgreSQL, perl 및 dojo 특수 문자 문제 (æ, ø, å)
나는이 search_word를 올바른 인코딩으로 변환하는 모든 트릭을 올바르게 수행 했으므로 postgre sql 데이터베이스에서 æ, ø 및 å의 올바른 이름을 검색 할 수 있지만 ... 여전히 실패합니다.
내 패치 코드를 만들었지 만이 페치는 0 행을 반환하고 psql 터미널에 동일한 명령을 삽입하면 46 개의 행이 반환됩니다. "tail -f log terminal"에서 STDERR 문을 복사하고 삽입합니다.
sub dbSearchPersons {
my $search_word = escapeSql($_[0]);
$search_word = Encode::decode_utf8($search_word);
$statement = "SELECT id,name,initials,email FROM person WHERE name ilike '\%".$search_word."\%' OR email ilike '\%".$search_word."\%' OR initials ilike '\%".$search_word."\%' ORDER BY name ASC";
$sth = $dbh->prepare($statement);
$num_rows = $sth->execute();
print STDERR "Statement: " . $statement;
if($num_rows > 0){
$persons = $dbh->selectall_hashref($statement,'id');
}
dbFinish($sth);
webdie($DBI::errstr) if($DBI::errstr);
}
당신이 볼 수 있듯이 나는 STDERR에 SQL 문을 작성하고 다음과 같은 출력한다 : psql의 명령을 통해 데이터베이스에 연결된 다른 단말기)로 ... 펄 코드는
[Fri Apr 27 11:24:26 2012] [error] [client 10.254.0.1] Statement: SELECT id,name,initials,email FROM person WHERE name ilike '%Jørgen%' OR email ilike '%Jørgen%' OR initials ilike '%Jørgen%' ORDER BY name ASC, referer: https://xx.xxx.xxx.xx/cgi-bin/users.cgi
SQL을 올바르게 작성했습니다. 러프 터미널 출력) 위의 터미널 출력을 복사하여 터미널에서 직접 붙여 넣고 psql 터미널에 직접 삽입하면 46 행이 반환됩니다 ... 그러나 perl은 여전히 모든 행을 반환하지 않습니다.
나는 그것을 얻지 못합니까? "ø"가 아닌 "ø"를 표시 할 문자열을 포맷 할 때 (perl은 dojo.xhr.post를 통해 보내지는 "J % C3 % B8rgen"에서 UTF8 인코딩을 변환하므로 사용하지 못하게해야합니다. SQL 문에서? psql 데이터베이스가 특정 인코딩을 가질 수 있기 때문에 어떻게 든 계정에 가져와야합니까? 아니면 완전히 다른 것일 수 있습니까?
누군가 나를 도울 수 있기를 바랍니다. 지금 이틀 동안이 문제를 고민하고 그들이해야처럼 일 이후 보이지만, 내가 조금 슬픈 얻을 작동하지 않는 한 : 당신은 아마 잊었
답변 해 주셔서 감사합니다. 나는 네가 맞다고 생각하지만 생산 환경을 발견했다. 특별한 charcters에 대한 몇 가지 사용자 지정 변환기를 사용하고 있기 때문에, 내 문제는 chars에 대한 사용자 정의 인코더/디코더를 사용해야하기 때문에 실제로 문제가되지 않았습니다. 단지 내 회사에서 어떤 사람이 저에게 말했을 것입니다. 필자는 불필요한 것들에 대해서 오랫동안 디버깅 할 필요가 없었습니다. 다시 한 번 감사드립니다. –