如何使用 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(使用前将#替换为@)