如何在 MySQL 中使用 JPA 自动生成区分大小写的列

Posted

技术标签:

【中文标题】如何在 MySQL 中使用 JPA 自动生成区分大小写的列【英文标题】:How to generate case sensitive columns with JPA in MySQL automatically 【发布时间】:2011-03-10 19:18:27 【问题描述】:

我如何命令 JPA 在创建时将带有文本内容的 mysql 数据库列设置为默认区分大小写?

【问题讨论】:

【参考方案1】:

MySQL varchar 类型不区分大小写。你要的是varbinary

CREATE TABLE IF NOT EXISTS `stuff` (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` varbinary(255) NOT NULL            -- varbinary to be case sensitive
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

【讨论】:

varchar 不区分大小写并不完全正确 - 它取决于表排序规则。例如,utf8_unicode_cs 区分大小写,而 utf8_unicode_cs 不区分大小写。 但是我怎样才能让 JPA 在自动创建模式时自动设置呢?我不想每次在不同的计算机或数据库实例上使用我的程序时手动操作生成的模式。 我对JPA一无所知,但我刚刚找到Character Encoding UTF-8 with JPA/Hibernate, MySql and Tomcat。它可能有一些用处。【参考方案2】:

您字段上的@Column 注释可以指定一个columnDefinition 属性,该属性可以让您为该列指定区分大小写的排序规则。

public abstract String columnDefinition

    (可选)为列生成 DDL 时使用的 SQL 片段。 默认使用生成的 SQL 来创建推断类型的列。默认:""

在您的情况下,例如,使用 @Column 注释,您将使用

@Column(name = "NAME_COL", columnDefinition = "VARCHAR(250) COLLATE latin1_general_cs")
private String name;

【讨论】:

不幸的是无法正常工作。如果我按照建议进行操作,JPA 似乎在将 String 数据类型映射到列并引发异常时遇到问题。 您能提供异常及其消息吗?您使用的是什么 JPA 实现?

以上是关于如何在 MySQL 中使用 JPA 自动生成区分大小写的列的主要内容,如果未能解决你的问题,请参考以下文章

JPA - 带有in子句和不区分大小写的规范

如何在jpa中实现自动增量

如何使用 JPA/Hibernate 注释将 MySQL char(n) 列映射到实例变量?

PSQLException:大对象不能在自动提交模式下使用

spring boot + JPA + MySql + Entity 表生成大写

MySQL如何区分大小写