PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Trình điều khiển JDBC Postgres có cách nào để đặt client_encoding để kết nối với cơ sở dữ liệu không?

Vì Java sử dụng mã hóa UNICODE (UTF-16) bên trong, nên sẽ không bình thường khi sử dụng client_encoding khác với UTF8 trong trình điều khiển PostgreSQL JDBC.

Do đó, nó buộc client_encoding với các giá trị đó, hãy xem org.postgresql.core.v3.ConnectionFactoryImpl.getParametersForStartup :

private List<String[]> getParametersForStartup(String user, String database, Properties info) {
  List<String[]> paramList = new ArrayList<String[]>();
  paramList.add(new String[]{"user", user});
  paramList.add(new String[]{"database", database});
  paramList.add(new String[]{"client_encoding", "UTF8"});
  paramList.add(new String[]{"DateStyle", "ISO"});
  [...]

Trên thực tế, nếu mã hóa ứng dụng được thay đổi thành bất kỳ thứ gì khác, trình điều khiển JDBC thể hiện sự không vui của nó không có điều khoản không chắc chắn:

public void receiveParameterStatus() throws IOException, SQLException {
  // ParameterStatus
  pgStream.receiveInteger4(); // MESSAGE SIZE
  String name = pgStream.receiveString();
  String value = pgStream.receiveString();

  [...]

  if (name.equals("client_encoding")) {
    if (allowEncodingChanges) {
      if (!value.equalsIgnoreCase("UTF8") && !value.equalsIgnoreCase("UTF-8")) {
        LOGGER.log(Level.FINE,
            "pgjdbc expects client_encoding to be UTF8 for proper operation. Actual encoding is {0}",
            value);
      }
      pgStream.setEncoding(Encoding.getDatabaseEncoding(value));
    } else if (!value.equalsIgnoreCase("UTF8") && !value.equalsIgnoreCase("UTF-8")) {
      close(); // we're screwed now; we can't trust any subsequent string.
      throw new PSQLException(GT.tr(
          "The server''s client_encoding parameter was changed to {0}. The JDBC driver requires client_encoding to be UTF8 for correct operation.",
          value), PSQLState.CONNECTION_FAILURE);

    }
  }

Bạn có thể gặp sự cố chuyển đổi mã hóa khi bạn đọc dữ liệu vào chương trình Java của mình; hãy thử và khắc phục sự cố ở đó.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hợp nhất các hàng liên tục với Postgresql

  2. Học thuyết JSON cột trong postgresql đang lưu trữ các đối tượng hoặc mảng của cùng một dữ liệu

  3. Cách khắc phục tập lệnh Sao lưu tự động cho postgres [Window]?

  4. Số tuần tùy chỉnh của PostgreSQL - tuần đầu tiên có ngày 1 tháng 2

  5. Có thể lấy lịch sử các truy vấn được thực hiện trong postgres không