Java JDBCPostgres驱动程序是否有办法设置“客户机编码”以连接到数据库?

Java JDBCPostgres驱动程序是否有办法设置“客户机编码”以连接到数据库?,java,postgresql,jdbc,spring-data-jpa,character-encoding,Java,Postgresql,Jdbc,Spring Data Jpa,Character Encoding,JDBCPostgres驱动程序是否有办法设置客户端编码以连接到数据库 我将Spring与JPA一起使用,连接信息位于application.properties文件中: 但是在阅读JDBC文档时,我没有找到名为characterEncoding的参数 实际上,文档中没有用于此目的的参数 如何设置将数据输入PG服务器时使用的编码?由于Java在内部使用UNICODE编码UTF-16,因此在PostgreSQL JDBC驱动程序中使用不同于UTF8的客户端编码是不自然的 因此,它强制客户端_编码为

JDBCPostgres驱动程序是否有办法设置客户端编码以连接到数据库

我将Spring与JPA一起使用,连接信息位于application.properties文件中:

但是在阅读JDBC文档时,我没有找到名为characterEncoding的参数

实际上,文档中没有用于此目的的参数


如何设置将数据输入PG服务器时使用的编码?

由于Java在内部使用UNICODE编码UTF-16,因此在PostgreSQL JDBC驱动程序中使用不同于UTF8的客户端编码是不自然的

因此,它强制客户端_编码为该值,请参见:

私有列表getParametersForStartupString用户、字符串数据库、属性信息{ List paramList=新建ArrayList; paramList.addnew字符串[]{user,user}; paramList.addnew字符串[]{database,database}; paramList.addnew字符串[]{client_encoding,UTF8}; paramList.addnew字符串[]{DateStyle,ISO}; [...] 事实上,如果客户机编码更改为任何其他编码,则在不确定的情况下:

public void receiveParameterStatus引发IOException、SQLException{ //参数状态 pgStream.receiveInteger4;//消息大小 字符串名称=pgStream.receiveString; 字符串值=pgStream.receiveString; [...] if name.equalsclient\u编码{ 如果allowEncodingChanges{ if!value.equalsIgnoreCaseUTF8&!value.equalsIgnoreCaseUTF-8{ LOGGER.logLevel.FINE, pgjdbc期望客户端_编码为UTF8以进行正确操作。实际编码为{0}, 价值 } pgStream.setEncodingEncoding.getDatabaseEncodingvalue; }否则,如果!value.equalsIgnoreCaseUTF8&!value.equalsIgnoreCaseUTF-8{ close;//我们现在完蛋了;我们不能信任任何后续字符串。 抛出新的PSQLExceptionGT.tr servers client_encoding参数已更改为{0}。JDBC驱动程序要求client_encoding为UTF8才能正确操作。, 值,PSQLState.CONNECTION\u失败; } }
当您将数据读入Java程序时,可能存在编码转换问题;请尝试在那里解决该问题。

由于Java在内部使用UNICODE编码UTF-16,因此在PostgreSQL JDBC驱动程序中使用不同于UTF8的客户机编码是不自然的

因此,它强制客户端_编码为该值,请参见:

私有列表getParametersForStartupString用户、字符串数据库、属性信息{ List paramList=新建ArrayList; paramList.addnew字符串[]{user,user}; paramList.addnew字符串[]{database,database}; paramList.addnew字符串[]{client_encoding,UTF8}; paramList.addnew字符串[]{DateStyle,ISO}; [...] 事实上,如果客户机编码更改为任何其他编码,则在不确定的情况下:

public void receiveParameterStatus引发IOException、SQLException{ //参数状态 pgStream.receiveInteger4;//消息大小 字符串名称=pgStream.receiveString; 字符串值=pgStream.receiveString; [...] if name.equalsclient\u编码{ 如果allowEncodingChanges{ if!value.equalsIgnoreCaseUTF8&!value.equalsIgnoreCaseUTF-8{ LOGGER.logLevel.FINE, pgjdbc期望客户端_编码为UTF8以进行正确操作。实际编码为{0}, 价值 } pgStream.setEncodingEncoding.getDatabaseEncodingvalue; }否则,如果!value.equalsIgnoreCaseUTF8&!value.equalsIgnoreCaseUTF-8{ close;//我们现在完蛋了;我们不能信任任何后续字符串。 抛出新的PSQLExceptionGT.tr servers client_encoding参数已更改为{0}。JDBC驱动程序要求client_encoding为UTF8才能正确操作。, 值,PSQLState.CONNECTION\u失败; } }
当您将数据读入Java程序时,可能存在编码转换问题;请尝试在那里解决问题。

您读取的文档是错误的!如果您谈到spring.datasource.url,它是一个spring属性,那么您应该查看spring doc而不是pg doc。您是否查看了@AbdelghaniRoussi该属性包含JDBC连接。a你确定我读错了文档吗?你能给我发一个到正确文档的链接吗?JDBC url的解释是由驱动程序完成的,所以我认为你读的是正确的文档。@Abdelghanirossi这个问题是关于MySQL的,而不是PostgreSQL。连接属性是驱动程序特定的,除了JDBC a中定义的两个属性user和passwordPI,所以OP在看正确的文档。你读错了文档!你说的spring.datasource.url是spring属性,你应该看spring doc而不是pg doc。你看过@AbdelghaniRoussi了吗?该属性包含JDBC连接。你确定我读错了文档吗?你能给我发一个指向正确文档的链接吗?JDBC url的解释是由驱动程序完成的,因此我认为您正在阅读
正确的文档。@Abdelghanirossi这个问题是关于MySQL的,不是关于PostgreSQL的。连接属性是特定于驱动程序的,除了JDBCAPI中定义的两个属性user和password,因此OP正在查看正确的文档。从5.0开始,Java使用UTF-16作为内部编码。谢谢,请查找参考:Java编程语言的本机字符编码是UTF-16。因此,Java平台中的字符集定义了16位UTF-16代码单元序列之间的映射,即字符序列和字节序列。欢迎您编辑我的答案。再次感谢您的善意。您当前的答案非常好:-Java在一开始使用UCS-2。从5.0开始,Java使用UTF-16作为内部编码。谢谢,请查找参考:Java编程语言的本机字符编码是UTF-16。因此,Java平台中的字符集定义了16位UTF-16代码单元序列之间的映射,即字符序列和字节序列。欢迎您编辑我的答案。再次感谢您的善意。你目前的答案非常好:-
spring.datasource.url=jdbc:postgresql://mypgserver.com:5432/mydb?user=myuser&password=mypass&characterEncoding=UTF-8