PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Драйверът на JDBC Postgres има ли начин да зададе client_encoding за свързване към базата данни?

Тъй като Java използва UNICODE кодиране (UTF-16) вътрешно, би било неестествено да се използва client_encoding различен от UTF8 в JDBC драйвера на PostgreSQL.

Следователно, той налага client_encoding към тези стойности вижте 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"});
  [...]

Всъщност, ако клиентското кодиране се промени на нещо друго, JDBC драйверът изразява своето недоволство без съмнение:

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

    }
  }

Вероятно имате проблем с преобразуването на кодиране, когато четете данните във вашата Java програма; опитайте да коригирате проблема там.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Импортиране на xml схема в postgres за автоматично създаване на таблица и след това попълването й с xml файл?

  2. Как да групираме и броим по дни в Rails в Postgres?

  3. Форматирайте числата със запетаи в PostgreSQL

  4. Как мога да създам ограничение, за да проверя дали имейл е валиден в postgres?

  5. pg_restore не можа да изпълни заявка:ГРЕШКА:невалидно име на локал:en_US.UTF-8