我有一個簡單的SQL語法插入到表。我使用的是Postgresql 8.4,並且已經將數據庫編碼設置爲UTF8,POSIX用於校對和字符類型。Postgresql PHP無效的字節序列編碼UTF8
查詢是好的,如果我在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)集名稱和CLIENT_ENCODING,但仍然有同樣的問題,如果我使用本地PostgreSQL驅動pg_pconnect
$instance->exec("SET client_encoding = 'UTF8';");
$instance->exec("SET NAMES 'UTF8';");
pg_set_client_encoding($link, "UNICODE");
我是工作,但目前我使用PDO作爲驅動程序。
,我也已經設置mb_internal_encoding('UTF-8');
是否有任何其他的方式來解決這個問題?
該錯誤只有當我試圖插入非ASCII字像阿拉伯或日語字
您可以將所有的鏈接/數據庫編碼設置爲使用utf-8,但如果原始字符串不是utf-8編碼,它仍然會導致錯誤。 – datasage 2013-03-06 16:13:45
您能否將pgAdmin的'SHOW client_encoding;'的結果發佈出來? – Houari 2013-03-06 20:34:19
請在錯誤報告中顯示單字符輸入和相應的字節序列(如'0xd85b')。你也應該告訴我們你的操作系統默認的文本編碼是什麼;如果你不知道,如果你在Linux/Unix上運行'locale'命令。在不知道原始編碼和原始文本的情況下,很難說很多。 – 2013-03-06 23:41:32