如何在PHP PgSQL数据库的PDO类构造函数中设置UTF-8

如何在PHP PgSQL数据库的PDO类构造函数中设置UTF-8,php,postgresql,utf-8,pdo,Php,Postgresql,Utf 8,Pdo,我想为我的PDO对象设置UTF8。这个类可以正确地与MySQL一起工作。 我找不到类似PgSQL的数组(PDO::MYSQL\u ATTR\u INIT\u COMMAND=>“SET NAMES UTF8”),我无法使用西里尔字母符号 class oop{ private $host="localhost"; private $user="xxxx"; private $db="xxxx"; private $pass="111111"; private $co

我想为我的PDO对象设置UTF8。这个类可以正确地与MySQL一起工作。 我找不到类似PgSQL的
数组(PDO::MYSQL\u ATTR\u INIT\u COMMAND=>“SET NAMES UTF8”)
,我无法使用西里尔字母符号

class oop{
private $host="localhost";
    private $user="xxxx";
    private $db="xxxx";
    private $pass="111111";
    private $conn;

public function __construct(){

    $this->conn = new PDO("pgsql:host=".$this->host.";dbname=".$this->db,$this->user,$this->pass,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8") );

}

很容易找到常规SQL查询的模拟查询

$pdo->query("SET NAMES UTF8")
但是,无论如何都必须在DSN中设置编码

$this->conn = new PDO("pgsql:host=".$this->host.";dbname=".$this->db.";charset=".$this->charset

根据我在上的第21.2.3节中看到的内容,您可以使用以下两个命令之一:

  • 将客户端_编码设置为“值”
  • 设置名称“值”
  • 其中value=
    UTF8
    。尝试使用:

    SET CLIENT_ENCODING TO 'UTF8';
    


    让我指出xmedeko的评论,这是绝对正确的:

    pg_connect("host=localhost options='--client_encoding=UTF8'");
    
    资料来源:


    使用charset=utf8(仅)与mysql配合使用…

    对于我来说,它似乎默认为UTF-8,而没有在默认的Postgres安装中明确设置它。我也找不到一个有文档记录的交换机,为什么需要这些私有变量呢$用户,$db,$pass?之所以需要,是因为在这个命令之前,mysql数据库没有使用西里尔字母符号。这个私有变量之所以需要,是因为我使用面向对象的方法,并且我将数据库从mysql更改为pgsql奇怪的是pgsql,dsn的手册中没有。docsbug?我尝试这样做:
    $this->conn=new PDO(“pgsql:host=“.this->host.”dbname=“.this->db,$this->user,$this->pass,$this->SET CLIENT_ENCODING TO'UTF8”),但我有个错误:语法错误,意外的T_STRING@vili您必须首先对PHP语法有基本的了解。Ad DSN字符集,我有错误
    无效的连接选项“charset”
    。应该是
    'options=\'--client\u encoding'$参数['charset']
    请参见
    pg_connect("host=localhost options='--client_encoding=UTF8'");