PostgreSQLデータベースを使用してperlとdojoで作成されたWebページがあります。私はデータベースのavailale人を検索しなければなりません。デンマークからは、æ、ø、åという文字が検索で利用可能になっている必要があります。私はこれがUTF8を使用しているときに標準であると思っていました。通常、mysqlを使ってphpでプログラムすると、それは難しいとは思いませんでした。PostgreSQL、perl、dojo特殊文字の問題(æ、ø、å)
このsearch_wordを適切なエンコーディングに変換するために私が知っているすべてのトリックを正しく行っているので、postgre sqlデータベースでæ、ø、åの正しい名前を検索できます。
私は私のperlコードを取得していますが、このフェッチは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のコマンドを介してデータベースに接続されている他の端末)に... perlのコードがある
[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データベースが特定のエンコーディングを持つことができるからです。何とかそのことを考慮する必要がありますか?それとも、まったく違うものかもしれませんか?
誰かが私を助けることを願っています。私は今、2日間、この問題で苦労して物事ので、彼らが必要のように見えますが、私は少し悲しい取得動作しませんされています:/
あなたはおそらくに忘れてしまったよろしく、 トールAstrupペダーセン
お返事ありがとうございます。私はあなたが正しいと思うが、生産環境を見つけた。特別なcharctersのためのいくつかのカスタムコンバータを使用しているので、私の問題は実際には私は文字のカスタムエンコーダ/デコーダを使用する必要があるので、最初の問題はなかった...ちょうど私の会社では、私は、必要でないものについては、長い間デバッグする必要はありませんでした。再度、感謝します :-) –