Spring-Boot,无法使用spring-data JPA在MySql中保存unicode字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring-Boot,无法使用spring-data JPA在MySql中保存unicode字符串相关的知识,希望对你有一定的参考价值。
我的application.properties
设置如下:
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.url = jdbc:mysql://localhost:3306/dbname?useUnicode=yes&characterEncoding=UTF-8
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
在我的pom.xml
我有这样的财产设置:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<start-class>toyanathapi.Application</start-class>
<java.version>1.8</java.version>
</properties>
我的实体:@Entity public class DailyRashifalEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String date;
private int rollno;
private String name;
//Constructors and getters/setters
}
问题1:如果我使用上面的设置,我会得到异常
java.sql.SQLException: Incorrect string value: 'xE0xA4xA7xE0xA4xBE...
问题2:如果我将数据源URL更改为:
spring.datasource.url = jdbc:mysql://localhost:3306/dbname
我的数据库中的unicodes会像这样保存
29 | 2074-03-04 | 3 | ?????????????? ?????,?????? ??????, ??????????? ????? ? ???? ???? ???? ??????
如何将它们保存在Mysql中,就像它们在unicode中一样,而不是将所有unicode数据转换为????????
。
在您的/etc/mysql/my.cnf
文件中更改以下内容。
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
保持你的休眠配置像这样
JDBC:MySQL的://本地主机:3306 / DBNAME了useUnicode = YES&的characterEncoding = UTF-8
并改变你的数据库整理像这样
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
更多信息:Link
也,
⚈ spring.jpa.properties.hibernate.connection.characterEncoding=utf-8
⚈ spring.jpa.properties.hibernate.connection.CharSet=utf-8
⚈ spring.jpa.properties.hibernate.connection.useUnicode=true
通过应用列定义解决了它,如下所示:
public class Goal{
@Column(name = "SOURCE_OF_FUNDS", length = 6000, columnDefinition = "VARCHAR(6000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL")
private String sourceOfFunds;
}
非答案对我有用...除了网址编码部分。
在我的案例中的解决方案是双重的:
1-在Database config bean的URL中添加编码:
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/customersdb?useSSL=false&useUnicode=yes&characterEncoding=UTF-8&characterSetResults=UTF-8" />
2-将此配置添加到您的调度程序配置文件:
<filter>
<filter-name>encoding-filter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding-filter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
否则,其他配置不会生效。
以上是关于Spring-Boot,无法使用spring-data JPA在MySql中保存unicode字符串的主要内容,如果未能解决你的问题,请参考以下文章
使用 spring-boot:1.5.1 和 spring-cloud-stream 时无法启动 bean 'inputBindingLifecycle'
无法在 IntelliJ Idea 中启动 spring-boot 应用程序
spring-boot 使用 main函数 无法启动的问题完美 解决方案。
无法实现对 Spring-Boot API 的基于角色的访问