JPA、JDBC和mysql的特殊字符
我在Spring Boot项目中使用了JPA、JDBC和mysql的特殊字符,jpa,jdbc,encoding,utf-8,spring-lemon,Jpa,Jdbc,Encoding,Utf 8,Spring Lemon,我在Spring Boot项目中使用了JPA、JDBC和MySQL。我在特殊角色方面有些困难。 如果我通过JdbcTemplate编写一个SQL查询,就可以了。我可以找回“á”字。 但是如果是通过JPA,这些字符是�-美国 模式的默认排序规则是utf8\u hungarian\u ci,默认字符集是utf8 我的应用程序.properties: spring.jpa.database: MYSQL spring.jpa.hibernate.ddl-auto: update spring.
JPA
、JDBC
和MySQL
。我在特殊角色方面有些困难。
如果我通过JdbcTemplate
编写一个SQL查询,就可以了。我可以找回“á”字。
但是如果是通过JPA,这些字符是�-美国
模式的默认排序规则是utf8\u hungarian\u ci,默认字符集是utf8
我的应用程序.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
,它们通过一个jointable与@manytomy
关系连接
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;
}
@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>
UTF-8
1.8
在hibernate 4.3.1中,这可以实现:
<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">utf-8</property>
true
utf-8
在hibernate 4.3.1中,这可以实现:
<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">utf-8</property>
true
utf-8
请在web xml中添加以下内容
<filter>
<filter-name>SetCharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
SetCharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
编码
UTF8
强制编码
真的
SetCharacterEncodingFilter
*
请在web xml中添加以下内容
<filter>
<filter-name>SetCharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
SetCharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
编码
UTF8
强制编码
真的
SetCharacterEncodingFilter
*
我使用application.properties,而不是xml-s。但是,我添加了如下行:hibernate.connection.useUnicode=true hibernate.connection.characterEncoding=UTF-8 connection.useUnicode=true connection.characterEncoding=UTF-8,但什么都没有发生。此外,它们还有“未知性能”警告。您可以尝试使用以下连接url:jdbc:mysql://localhost:3306/mydb?useUnicode=true&连接安装=utf8\u概述\u ci&;characterSetResults=utf8&;characterEncoding=UTF8它没有帮助。但是从java.io.CharConversionException
来看,我想这不是jpa或hibernate的错,java本身有些问题……它不是jpa或hibernate。你可以在tomcat或maven级别配置它,以及连接url。你可以在下面的web.xml中添加上述错误吗?我使用application.properties,而不是xml-s。但是,我添加了如下行:hibernate.connection.useUnicode=true hibernate.connection.characterEncoding=UTF-8 connection.useUnicode=true connection.characterEncoding=UTF-8,但什么都没有发生。此外,它们还有“未知性能”警告。您可以尝试使用以下连接url:jdbc:mysql://localhost:3306/mydb?useUnicode=true&连接安装=utf8\u概述\u ci&;characterSetResults=utf8&;characterEncoding=UTF8它没有帮助。但是从java.io.CharConversionException
来看,我想这不是jpa或hibernate的错,java本身有点不好……它不是jpa或hibernate,你可以在tomcat或maven级别配置它,以及连接url。你可以在web.xml中添加以下内容来解决上面的错误我在我的项目中不使用web.xml,因为我使用Spring Boot。然而,我将其添加到Tomcat的web.xml中,并从注释中删除了org.apache.catalina.filters.SetCharacterEncodingFilter
部分,但什么都没有发生。这是Spring Boot文档,介绍了如何在嵌入式Tomcat服务器中配置过滤器->我在项目中不使用web.xml,因为我使用Spring Boot。然而,我将其添加到Tomcat的web.xml中,并从注释中删除了org.apache.catalina.filters.SetCharacterEncodingFilter
部分,但什么都没有发生。下面是关于如何在嵌入式Tomcat服务器中配置过滤器的Spring引导文档->