12

テーブルに挿入するための簡単なSQL構文があります。私はPostgresql8.4を使用しており、データベースエンコーディングをUTF8に設定し、照合と文字タイプにPOSIXを設定しています。

pgadmin3で実行するとクエリは問題ありませんが、PHPで実行するとエラーが発生します。

"Internal Server Error: SQLSTATE[22021]:
Character not in repertoire: 7 ERROR: 
invalid byte sequence for encoding \"UTF8\": 0xd85b\nHINT:
This error can also happen if the byte sequence does not match the encoding expected by the server,
which is controlled by \"client_encoding\"

だから私はPHP(PDO)からNAMESとclient_encodingを設定しようとしましたが、それでも同じ問題があります

$instance->exec("SET client_encoding = 'UTF8';");
$instance->exec("SET NAMES 'UTF8';");

pg_set_client_encoding($link, "UNICODE");ネイティブのpostgresqlドライバーを使用している場合は動作しますpg_pconnectが、現在はドライバーとしてPDOを使用しています。

そして私もすでに設定しましたmb_internal_encoding('UTF-8');

この問題を解決する他の方法はありますか?

このエラーは、アラビア語や日本語などのASCII以外の単語を挿入しようとした場合にのみ表示されます。

4

3 に答える 3

9

utf8_encode()を使用してutf-8にエンコードしてみてください。

$query = "INSERT INTO student (id, firstName, lastName, age) VALUES (1, 'myFisrtName', 'myLastName', 23)";

pg_exec($connection, utf8_encode($query ));
于 2013-03-13T11:41:08.170 に答える