spring boot 使用utf8mb4的操作

下面是详细讲解 “spring boot 使用utf8mb4的操作”的完整攻略:

什么是utf8mb4?

UTF-8 是一种针对Unicode的可变长度字符编码,也是一种前缀码。UTF-8使用一至四个字节编码UNICODE字符。在UTF-8中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节,而emoji表情等一些非常规的字符则会被编码为四个字节。然而标准UTF-8编码只允许字符长度最大为三个字节,无法表示4字节的UTF-8字符。因此 MySQL 引入了 utf8mb4 字符集来解决这个问题。

如何使用utf8mb4

1.配置MySQL数据库的utf8mb4字符集

在Spring Boot项目的application.properties文件中添加以下配置:

spring.datasource.url=jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=root

spring.jpa.properties.hibernate.hbm2ddl.charset=utf8mb4
spring.jpa.properties.hibernate.connection.characterEncoding=utf-8
spring.jpa.properties.hibernate.connection.useUnicode=true

其中 mysql数据库必须是5.5.3以上的版本才能支持utf8mb4字符集。

2.指定数据库的的utf8mb4字符集

在Spring Boot的实体类中,在需要varchar类型的字段上使用@Column(columnDefinition = "nvarchar(50) character set utf8mb4")注解来指定数据库字段的字符集

@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @Column(name = "username", columnDefinition = "nvarchar(50) character set utf8mb4")
    private String username;

    @Column(name = "password")
    private String password;
}

示例说明

1.存储emoji表情

使用utf8mb4可以轻松存储emoji表情,例如我们有以下的实体类:

@Entity
@Table(name = "emoji")
public class Emoji {
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "icon", columnDefinition = "nvarchar(100) character set utf8mb4")
    private String icon;

    public Emoji() {
    }

    public Emoji(String name, String icon) {
        this.name = name;
        this.icon = icon;
    }
}

然后我们可以通过以下代码来存储一个带有emoji表情的实体:

Emoji emoji = new Emoji("smile", "this_is_a_emoji?");
emojiRepository.save(emoji);

2.读取中文字符内容

中文是不包含在ASCII字符集中的一类字符,如果我们在MySQL中使用utf8字符集存储这类字符,当读取中文字符时会出现乱码。以下是一个测试代码,演示了在MySQL中存储中文字符时出现乱码的问题:

public void test(Emoji emoji) {
    emojiRepository.save(emoji);
    Optional<Emoji> optionalEmoji = emojiRepository.findById(emoji.getId());
    if (optionalEmoji.isPresent()) {
        Emoji resultEmoji = optionalEmoji.get();
        System.out.println("表情名称:" + resultEmoji.getName());
        System.out.println("表情内容:"+resultEmoji.getIcon());
    }
}

如果在MySQL中使用utf8字符集,则会读取到乱码的结果,而使用utf8mb4字符集则可以读取到正确的结果。

总结

使用utf8mb4字符集可以解决MySQL存储emoji表情等一些非标准utf8字符时出现的问题,并且可以支持更多的字符,更好的满足多语言场景下的需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring boot 使用utf8mb4的操作 - Python技术站

(0)
上一篇 2023年6月16日
下一篇 2023年6月16日

相关文章

  • SpringBoot server.port配置原理详解

    让我们来详细讲解一下“SpringBoot server.port配置原理详解”。 什么是server.port配置 在SpringBoot应用中,我们可以通过server.port属性来指定应用的端口号。这个属性可以在配置文件(如application.properties、application.yml等)或者命令行参数中指定。 配置文件中指定serve…

    Java 2023年5月20日
    00
  • 深入理解hibernate的三种状态

    深入理解Hibernate的三种状态包括: 瞬时状态(transient state) 持久状态(persistent state) 游离状态(detached state) 瞬时状态(transient state) 当一个新的Java对象被创建时,它处于瞬时状态。Hibernate对该对象并没有关注,在Hibernate Session缓存(first …

    Java 2023年5月19日
    00
  • Springboot+Spring Security实现前后端分离登录认证及权限控制的示例代码

    下面是详细的讲解“Springboot+Spring Security实现前后端分离登录认证及权限控制的示例代码”的攻略。 1. Spring Security简介 Spring Security 是一个强大且高度可定制的身份验证和访问控制框架,与 Spring 应用程序无缝集成,具有广泛的可用插件和扩展点以满足几乎任何身份验证和授权要求。Spring Se…

    Java 2023年5月20日
    00
  • Java配置DBeaver的详细步骤

    以下是Java配置DBeaver的详细步骤: 步骤一:下载并安装DBeaver 1.前往DBeaver官网,下载对应操作系统的安装包。例如:Windows系统下载dbeaver-ce-x.y.z-x64-setup.exe。 2.双击exe文件,按照向导提示安装DBeaver。 步骤二:安装MySQL驱动 1.前往MySQL官网,下载对应版本的MySQL C…

    Java 2023年6月1日
    00
  • @Controller、@RestController注解区别详解

    下面是关于“@Controller、@RestController注解区别详解”的完整攻略。 一、@Controller注解 @Controller是SpringMVC中常用的控制器注解,用于标记此类为控制器,能够处理用户的请求并返回相应的数据。 1.1 示例代码 @Controller @RequestMapping("/hello")…

    Java 2023年6月15日
    00
  • Mybatis如何自动生成数据库表结构总结

    Mybatis是一个优秀的ORM框架,除了提供了常见的ORM操作外,还可以通过它的Generator来实现数据库表结构的自动生成。 步骤一:配置GeneratorConfig.xml文件 在项目的Java包下创建config文件夹,并在其中新建一个GeneratorConfig.xml(文件名不一定要求)文件,用于配置自动生成的相关信息。 <?xml …

    Java 2023年5月19日
    00
  • java JSP开发之Spring中Bean的使用

    Java JSP开发之Spring中Bean的使用 在Java JSP开发中,Spring框架是一种非常常用的框架。Spring框架通过IoC和AOP等技术,简化了Java JSP应用程序的开发和维护,而Bean是Spring框架的核心概念之一。本文将详细讲解如何在Spring中使用Bean。 什么是Bean? 在Spring框架中,Bean是一个由Spri…

    Java 2023年5月19日
    00
  • Sprint Boot @DateTimeFormat使用方法详解

    @DateTimeFormat是Spring Boot中的一个注解,用于将字符串类型的日期转换为Java中的日期类型。在本文中,我们将详细介绍@DateTimeFormat注解的作用和使用方法,并提供两个示例。 @DateTimeFormat注解的作用 @DateTimeFormat注解用于将字符串类型的日期转换为Java中的日期类型。当使用@DateTim…

    Java 2023年5月5日
    00
合作推广
合作推广
分享本页
返回顶部