Mam prostą składnię SQL do wstawienia do tabeli. Używam PostgreSQL 8.4 i już ustawiłem kodowanie bazy danych na UTF8, a POSIX na sortowanie i typ znaku.Postgresql Niepoprawna sekwencja bajtów PHP do kodowania UTF8
Zapytanie jest w porządku, jeśli uruchomię go pod pgadmin3, ale przyniosę błąd, jeśli wykonam w 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\"
więc próbowałem ustawić nazwisk i client_encoding z PHP (PDO), ale nadal mają ten sam problem
$instance->exec("SET client_encoding = 'UTF8';");
$instance->exec("SET NAMES 'UTF8';");
pg_set_client_encoding($link, "UNICODE");
moich za pracę, jeśli używam natywny sterownik postgresql pg_pconnect
, ale obecnie Używam PDO jako Driver.
i ja też już ustawione mb_internal_encoding('UTF-8');
Czy jest jakiś inny sposób, aby rozwiązać ten problem?
Ten błąd pojawia się tylko wtedy, gdy próbujesz wstawić non słowo ascii jak arabski czy japoński słowo
Możesz ustawić kodowanie wszystkich linków/baz danych, aby używało utf-8, ale jeśli oryginalny ciąg nie jest zakodowany w utf-8, nadal będzie powodować błąd. – datasage
Czy możesz opublikować wynik polecenia 'SHOW client_encoding;' z pgAdmin? – Houari
Proszę pokazać wejście pojedynczego znaku i odpowiadającą sekwencję bajtów z raportu o błędzie (np. '0xd85b'). Powinieneś również powiedzieć nam, jakie jest domyślne kodowanie tekstu w twoim systemie operacyjnym; jeśli nie wiesz, uruchom komendę 'locale', jeśli używasz systemu Linux/Unix. Bez znajomości oryginalnego kodowania i oryginalnego tekstu trudno powiedzieć wiele. –