2013-08-15 65 views
6

Tôi muốn đặt UTF8 cho đối tượng PDO của mình. Lớp này hoạt động đúng với MySQL. Tôi không thể tìm thấy một số tương tự của array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8") cho PgSQL và tôi không thể làm việc với các biểu tượng cyrillic.Cách đặt UTF-8 trong hàm tạo lớp PDO cho cơ sở dữ liệu PHP PgSQL

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")); 

} 
+1

Đối với những gì nó có giá trị, nó xuất hiện để mặc định UTF-8 cho tôi mà không rõ ràng thiết lập nó trên một cài đặt Postgres mặc định. Tôi không thể tìm thấy một chuyển đổi tài liệu cho điều này dù là ATM. – deceze

+0

Tại sao bạn cần tất cả các biến riêng tư này? $ user, $ db, $ pass? –

+0

Nó cần bởi vì, cơ sở dữ liệu mysql đã không làm việc với các biểu tượng cyrillic, trước khi lệnh này. – vili

Trả lời

3

Từ những gì tôi thấy trong phần 21.2.3 trên this page, bạn có thể sử dụng một trong hai lệnh sau:

  1. SET CLIENT_ENCODING TO 'value';
  2. SET NAMES 'value';

nơi value = UTF8. Thử sử dụng:

SET CLIENT_ENCODING TO 'UTF8'; 

hoặc

SET NAMES 'UTF8'; 
1

nó là rất dễ dàng để tìm một tương tự cho truy vấn SQL thường xuyên

$pdo->query("SET NAMES UTF8") 

Tuy nhiên, mã hóa đã được thiết lập trong DSN nào

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

Điều lạ lùng là cho pgsql nó là * không * trong hướng dẫn cho dsn. docsbug? – PeeHaa

+0

Tôi thử điều này: '$ this-> conn = new PDO (" pgsql: host = ". $ This-> host."; Dbname = ". $ This-> db, $ this-> user, $ this-> vượt qua, $ this-> SET CLIENT_ENCODING TO 'UTF8'); ', nhưng tôi đã nhầm lẫn: lỗi cú pháp, T_STRING bất ngờ – vili

+2

@vili bạn phải có sự hiểu biết cơ bản về cú pháp PHP trước tiên. –

Các vấn đề liên quan