【问题标题】:Spring data's save method results losing some dataSpring数据保存方法结果丢失一些数据
【发布时间】:2017-07-31 19:01:52
【问题描述】:

我正在使用 Spring Boot + Spring Data JPA + PostgreSQL。我有一个简单的包含一些字符串的类。

例如:

public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String name;
    private String surname;
}

我正在创造新的人:

Person person = new Person(null, "Roman", "Brzęścikiewicz");

其中包含一些波兰语符号,例如“ę”和“ś”。 当我将其保存到数据库时:

personRepository.save(person);

然后我留下了保存在数据库中的人,该人收到了 ID 和姓名但没有姓氏示例:

id;name;surname
1;Roman;

但是当我的姓氏没有波兰符号时,我在数据库中得到了正确的行:

id;name;surname
1;Roman;Brzescikiewicz

我的应用程序属性:

spring.datasource.url=jdbc:postgresql://localhost:5433/db
spring.datasource.username=user
spring.datasource.password=pass
spring.datasource.driverClassName=org.postgresql.Driver
spring.jpa.hibernate.ddl-auto=validate

添加 ?useUnicode=true&characterEncoding=utf8 正如关于stackoverflow的一些问题所建议的那样,它不起作用。

有什么想法吗?

【问题讨论】:

  • 你的数据库和表编码方案怎么样?

标签: java spring spring-boot spring-data spring-data-jpa


【解决方案1】:

字符编码错误。 UTF-8 != utf8

characterEncoding=UTF-8

将其添加到您的 jdbc URL

jdbc:postgresql://localhost:5433/db?useUnicode=yes&characterEncoding=UTF-8

您可以阅读相同情况的示例here

【讨论】:

  • 添加到ma jdbc url并尝试:characterEncoding=UTF-8 spring.jpa.characterEncoding=UTF-8 spring.jpa.hibernate.characterEncoding=UTF-8 spring.datasource.characterEncoding=UTF- 8 hibernate.characterEncoding=UTF-8 仍然无法正常工作
  • 你能检查一下你的数据库模式编码它也是 UTF-8 吗?您可以将一些数据库客户端连接到您的数据库并检查该属性
  • 服务器编码是 utf8,数据库编码是 UTF8,带有排序规则 en_US.utf8 和相同的字符类型,当我通过 SQL 插入带有波兰符号的姓氏时,它可以工作,但不能使用 spring 数据
  • 你能把你的 spring.datasource.url 属性的值复制到这里吗?
【解决方案2】:

解决了。

其实这是一个非常愚蠢的问题。我正在使用 PhpPgAdmin 在数据库中进行搜索,并且 phppgadmin 存在不显示波兰符号的错误...在 pgadmin4 中它显示正确,如果我在 rest 控制器中通过 spring JPA 访问数据,它也可以正常工作。

【讨论】:

    猜你喜欢
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多