Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA、JDBC和mysql的特殊字符_Jpa_Jdbc_Encoding_Utf 8_Spring Lemon - Fatal编程技术网

JPA、JDBC和mysql的特殊字符

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.

我在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.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引导文档->