如何使用 Spring Boot 在注释或 application.properties 文件中将表属性的排序规则设置为 utf8_bin

2023-11-23

如何使用 Spring Boot 在注释或 application.properties 文件中将表属性的排序规则设置为 utf8_bin ?

我尝试了很多方法,但没有成功。你能帮我吗?

我尝试过以下几种方法。

第一:使用@Column注释,如下所示:

@Column(name = "user_id",columnDefinition="VARCHAR(255) COLLATE utf8_bin")

Second:

 @Column(columnDefinition="VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin")

第三:使用application.properties文件

spring.jpa.properties.hibernate.connection.characterEncoding=utf-8
spring.jpa.properties.hibernate.connection.CharSet=utf-8
spring.jpa.properties.hibernate.connection.useUnicode=true
spring.jpa.properties.hibernate.connection.collationConnection=utf8_bin

Fourth:

spring.datasource.url =jdbc:mysql://localhost:3306/iot_schema?createDatabaseIfNotExist=true&useUnicode=true&connectionCollation=utf8_bin&characterSetResults=utf8

这是受类似问题的回答启发的解决方案:使用 Hibernate Dialect 设置表字符集/排序规则?

扩展首选 MySQL 方言并覆盖其获取表类型字符串()像这样的方法:

public class MySQLCustomDialect extends MySQL8Dialect {
    @Override
    public String getTableTypeString() {
        return " ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin";
    }
}

设置要使用的类应用程序属性:

spring.jpa.properties.hibernate.dialect=my.package.MySQLCustomDialect

这是生成的 SQL 查询:

    create table test_table (
      ...
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

编辑 3/2022

从 Hibernate 6 开始,所有版本特定的 MySQL 方言类均已弃用,应使用 MySQLDialect。默认情况下,它将方言版本设置为 5.0。这可以通过明确指定所需的版本来解决,例如:

public class MySQL8UnicodeDialect extends MySQLDialect {

    private static final int MY_SQL_DIALECT_VERSION_MAJOR = 8;

    public MySQL8UnicodeDialect() {
        super(DatabaseVersion.make(MY_SQL_DIALECT_VERSION_MAJOR));
    }

    @Override
    public String getTableTypeString() {
        return " ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci";
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Spring Boot 在注释或 application.properties 文件中将表属性的排序规则设置为 utf8_bin 的相关文章

随机推荐