PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Apakah Driver JDBC Postgres memiliki cara untuk mengatur client_encoding untuk terhubung ke database?

Karena Java menggunakan penyandian UNICODE (UTF-16) secara internal, tidak wajar jika menggunakan client_encoding berbeda dari UTF8 di driver PostgreSQL JDBC.

Akibatnya, ini memaksa client_encoding untuk nilai itu, lihat 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"});
  [...]

Bahkan, jika pengkodean klien diubah menjadi yang lain, driver JDBC mengungkapkan ketidakbahagiaannya dalam istilah yang tidak pasti:

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

    }
  }

Anda mungkin memiliki masalah konversi encoding ketika Anda membaca data ke dalam program Java Anda; coba dan perbaiki masalahnya di sana.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nilai Kunci Utama Tidak Bertambah dengan Benar

  2. Periksa apakah database ada di PostgreSQL menggunakan shell

  3. Sisipkan gambar di database postgresql

  4. Bagaimana cara menggunakan subquery di Django?

  5. SEPERTI permintaan pada elemen array jsonb datar