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日

相关文章

  • 如何使用JFrame完成动态模拟时钟

    使用JFrame完成动态模拟时钟的攻略可以分为以下几个步骤: 1. 导入Swing包 使用JFrame需要导入Swing包,可以在文件头添加以下代码: import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; import java.awt.Graphics…

    Java 2023年5月26日
    00
  • 浅谈SpringMVC jsp前台获取参数的方式 EL表达式

    关于浅谈SpringMVC jsp前台获取参数的方式 EL表达式,以下是完整攻略。 一、什么是EL表达式 EL(Expression Language)表达式是JSP 2.0引入的一种表达式语言,它主要用于动态的访问和操作JavaBean中的数据。 二、EL表达式的特点 EL表达式有以下特点: 提供了一种简洁的访问JavaBean属性的方式,不需要借助Jav…

    Java 2023年6月15日
    00
  • Spring Security使用Lambda DSL配置流程详解

    Spring Security是一个非常强大和流行的框架,用于保护Web应用程序和REST API。在配置Spring Security时,我们可以使用Java配置或XML配置。然而,最近Spring Security又推出了一种新的配置方式,即使用Lambda DSL编程风格进行配置。本篇文章将详细讲解以Lambda DSL方式在Spring Securi…

    Java 2023年5月20日
    00
  • Java实现JDBC批量插入原理详解

    Java实现JDBC批量插入原理详解 为什么使用JDBC批量插入? 当需要将大量数据存入数据库时,常规的操作是采用循环逐条插入的方式,此种方式会严重影响效率且容易出现内存溢出等问题。而使用JDBC批量插入,可以有效提高插入效率,减少内存消耗,缩短程序执行时间。 JDBC批量插入是怎么工作的? JDBC批量插入是通过使用PreparedStatement的ad…

    Java 2023年5月20日
    00
  • Java class文件格式之特殊字符串_动力节点Java学院整理

    Java class文件格式之特殊字符串是指Java class 文件中所使用的特殊字符串,它们具有特殊的含义,能够影响到Java程序的执行。以下是针对该话题的完整攻略: 1. 什么是Java class文件格式之特殊字符串? 1.1 Java class文件格式 Java class文件格式,是Java编译器编译Java源代码生成的二进制代码文件格式。Ja…

    Java 2023年5月27日
    00
  • Java新手入门学习之正则表达式

    Java新手入门学习之正则表达式 什么是正则表达式? 正则表达式是一种描述字符串模式的语言,可以通过正则表达式来搜索、匹配、替换和分割文本。在Java中,可以使用Java的正则表达式API来完成对于字符串的处理。 Java中正则表达式的基本语法 Java中正则表达式的基本语法如下: pattern.matcher(str).method() 其中patter…

    Java 2023年5月27日
    00
  • Hibernate三种状态和Session常用的方法

    下面我为你详细讲解一下Hibernate三种状态和Session常用的方法。 Hibernate三种状态 在Hibernate中,每个对象都有三种状态: 持久化状态(Persistent):对象与数据库中的数据相互关联,当对对象进行改变后,会同步到数据库中。 脱管状态(Detached):对象仍然存在,但它已经和session失去了关联,更改对象不会同步到数…

    Java 2023年5月19日
    00
  • Java中关于 null 的几种处理方式详解

    Java中关于 null 的几种处理方式详解 1. 什么是 null 在 Java 中,null 表示一个变量没有被初始化。null 并不是一个对象,也不是一个具体的类型,它只是一种特殊的表示方法。 2. null 的使用 在 Java 中,null 可以赋给任何引用类型的变量,包括类、数组、接口等等。 2.1 判断是否为 null 在 Java 中,可以使…

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