【springboot】关于jpa自动建表 DEFAULT CHARSET=latin1 的简单解决方法

本文介绍在使用Spring Boot与JPA进行自动建表时遇到的编码问题,通过自定义MySQL配置类,将默认字符集设置为utf8,以确保数据库表的正确创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习http://www.ityouknow.com/spring-boot.html这个系列文章,发现点小问题,就是jpa自动建表默认编码会有问题,找到一个简单的解决方法,如下:

1.新建类

import org.hibernate.dialect.MySQL5InnoDBDialect;
import org.springframework.stereotype.Component;

@Component
@SuppressWarnings("deprecation")
public class MysqlConfig extends MySQL5InnoDBDialect {
	
	@Override
	public String getTableTypeString() {
		return "ENGINE=InnoDB DEFAULT CHARSET=utf8";
	}
}

2.把application.properties文件中的下面第一句注释替换为上面新建类就可以了

#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.properties.hibernate.dialect=com.neo.util.MysqlConfig

3.然后去mysql看看show create table 表名; 是否变成 DEFAULT CHARSET=utf8

### 自动功能的配置 在 Spring Boot 中,可以通过 `application.properties` 或者 `application.yml` 文件中的 Hibernate 属性来控制数据库的创行为。这些属性允许开发者指定当应用程序启动时,Hibernate 如何处理实体类对应的数据库。 以下是常见的 Hibernate 数据库更新策略及其含义: - **create**: 每次应用启动时都会重新创所有的结构并删除旧数据。 - **update**: 如果检测到现有模式与实体不匹配,则会自动更新现有的结构,但不会丢失已有数据。 - **validate**: 验证当前的实体映射是否与数据库一致,如果不一致则抛出异常。 - **none**: 不执行任何 DDL 操作[^1]。 #### 示例配置 下面是一个典型的 `application.properties` 配置文件示例,用于启用自动功能: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=password spring.jpa.hibernate.ddl-auto=create spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect ``` 上述配置中,`spring.jpa.hibernate.ddl-auto=create` 明每次运行程序时都将重数据库结构[^2]。 如果更倾向于 YAML 格式的配置方式,可以这样写: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC username: root password: password jpa: hibernate: ddl-auto: create show-sql: true properties: hibernate: dialect: org.hibernate.dialect.MySQL8Dialect ``` 需要注意的是,在生产环境中推荐使用 `ddl-auto=none` 或 `ddl-auto=validate` 来避免意外的数据丢失或修改[^3]。 #### 定义实体类 为了使 Hibernate 能够识别哪些 Java 类应该被映射成数据库,需要通过 JPA 注解标注它们。例如: ```java import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; // Getters and Setters omitted for brevity. } ``` 在这个例子中,`@Entity` 注解告诉 Hibernate 将这个类视为一个实体,并为其生成一张名为 `user` 的[^4]。 #### 使用 Repository 接口操作数据 一旦完成了实体定义以及必要的配置工作之后,就可以利用 Spring Data JPA 提供的各种内置接口来进行 CRUD 操作了。比如继承自 `JpaRepository<T, ID>` 的定制化仓库接口能够提供基本的操作能力[^5]: ```java import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository<User, Long> { } ``` 以上即为完整的基于 Spring Boot 和 JPA 实现自动的过程描述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬砖民工金币

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值