【发布时间】:2016-05-22 09:10:28
【问题描述】:
我在 Spring Boot 项目中使用 JPA、JDBC 和 MySQL。我对特殊字符有一些麻烦。
如果我通过JdbcTemplate 写一个SQL 查询,那就没问题了。我可以取回“á”字符。
但如果是通过JPA,那些字符是�-s。
架构的默认排序规则是 utf8_hungarian_ci,默认字符集是 utf8。
我的application.properties:
spring.jpa.database: MYSQL
spring.jpa.hibernate.ddl-auto: update
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url: jdbc:mysql://localhost:3306/databasename?useUnicode=yes&characterEncoding=UTF-8
spring.datasource.username: root
spring.datasource.password: password
我有两个表,user 和 userroles,它们通过可连接的 @ManyToMany 关系连接。
User.java:
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "user_userrole",
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "userrole_id", referencedColumnName = "id"))
private List<UserRole> userRoles;
public List<UserRole> getUserRoles() {
return userRoles;
}
UserRole.java:
@ManyToMany(mappedBy = "userRoles")
private List<User> users;
当我调用这个方法时:
currentUser.getUserRoles();
所有“á”字符都替换为 �-s。 我错过了什么?
编辑:
我在数据库中添加了一个新用户:árvíztűrő tükörfúrógép。 (我可以毫无问题地做到这一点,顺便说一下,我也用 jpa 保存了用户。) 但是当我尝试登录时,我遇到了这个异常:
error":"Internal Server Error","exception":"java.io.CharConversionException"
,"message":"Not an ISO 8859-1 character: ű"
pom.xml:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
【问题讨论】:
标签: jpa jdbc encoding utf-8 spring-lemon