spring boot 使用utf8mb4的操作

yizhihongxing

下面是详细讲解 “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日

相关文章

  • Java实现图片验证码具体代码

    当网站需要进行用户登录、注册等操作时,为了防止机器人恶意攻击,通常会采用图片验证码的方式来验证用户是否为人类。下面介绍一种基于 Java 实现图片验证码的具体代码,包含验证码生成和校验流程。 生成验证码图片 验证码生成包含以下几个步骤: 生成随机字符串 /** * 生成指定长度的随机字符串 * @param length 随机字符串长度 * @return …

    Java 2023年6月15日
    00
  • Java中classpath讲解及使用方式

    Java中classpath讲解及使用方式 什么是classpath? classpath是一个环境变量,用于告诉Java虚拟机在哪里查找已编译的类文件。在Java中,类文件通常存储在文件系统中的某个位置,classpath指定了Java在哪里查找这些文件。通过设置classpath,我们可以使Java VM在任何地方都能找到所需的类文件。 classpat…

    Java 2023年5月26日
    00
  • Java匿名对象与匿名内部类

    Java匿名对象与匿名内部类攻略 在Java中,匿名对象和匿名内部类都是比较常见的语法特性。这些特性可以帮助我们更加方便地编写Java程序,提高代码的可重用性和可维护性。在本文中,我们将详细讨论Java匿名对象和匿名内部类,并给出一些示例说明,帮助大家更好地理解这些概念。 Java匿名对象 在Java中,我们可以使用对象的匿名形式来创建对象。所谓匿名对象,就…

    Java 2023年5月26日
    00
  • javascript es6的常用语法你知道吗

    JavaScript ES6 常用语法 ES6是JavaScript的一种标准,也被称为ECMAScript2015,它为JavaScript添加了很多新特性和语法。以下是ES6中常用的几种语法。 let & const 在ES6之前,我们只能使用var关键字来声明变量。而在ES6中,我们可以使用let和const关键字来声明变量。 let用来声明一…

    Java 2023年6月15日
    00
  • Java多线程Condition接口原理介绍

    下面是对于Java多线程Condition接口的原理介绍: Condition接口是什么? 在Java中,我们可以使用synchronized、wait()、notify()、notifyAll()等来进行线程同步和通信。而条件对象(Condition)是在Java 5中新增的,它可以更加灵活地控制线程的等待和唤醒,提供了更高级、更安全、更灵活的线程同步方式…

    Java 2023年5月19日
    00
  • IntelliJ IDEA配置java环境及解决IDEA不能直接运行单个JAVA文件的问题

    下面我会详细讲解一下“IntelliJ IDEA配置java环境及解决IDEA不能直接运行单个JAVA文件的问题”的完整攻略,主要内容包括以下几个方面: 安装jdk 配置环境变量 配置IntelliJ IDEA的java环境 解决IDEA不能直接运行单个JAVA文件的问题 首先,我们需要先下载并安装jdk。以jdk1.8为例,下载后直接按照默认的安装路径进行…

    Java 2023年5月26日
    00
  • java实现简单租车系统

    Java实现简单租车系统攻略 1.需求分析 租车系统需要考虑的功能有: 汽车种类和数量的分类管理 用户租车和归还车辆的操作 计算租车费用 根据以上需求,我们需要有以下的类: Car:汽车类,用于描述汽车对象的基本属性,如品牌、型号、日租金等。 CarRentSystem:租车系统类,用于管理汽车的分类、添加、删除和租用操作等。 User:用户类,用于描述租车…

    Java 2023年5月19日
    00
  • Java Servlet简单实例分享(文件上传下载demo)

    下面是Java Servlet简单实例分享的完整攻略。 1. 创建Java Web工程 在Eclipse中创建一个新的Java Web工程,命名为FileUploadDownloadDemo。 2. 添加servlet-api依赖 右键工程 -> Properties -> Java Build Path -> Libraries -&gt…

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