gpt4 book ai didi

mysql - 使用 MySQL InnoDB 对 JPA 中 TEXT 列的唯一约束

转载 作者:行者123 更新时间:2023-11-29 02:05:17 27 4
gpt4 key购买 nike

我们需要将一个长 UTF-8 字符串存储到 MySQL 数据库中,该数据库必须进行唯一性检查。这是当前配置:

@Column(unique = true,length = 8000,columnDefinition="TEXT")
private String text;

但由于 MySQL 需要为 BLOBTEXT 字段指定索引前缀,因此失败并出现以下错误:

BLOB/TEXT column 'path' used in key specification without a key length

如何正确配置我的 ORM 映射以支持此类用例?

最佳答案

你有没有考虑过calculating a hash value for your text string ?然后您可以存储散列值并检查散列值的唯一性。与散列值发生任何冲突,然后检查实际的文本字符串。如果它们不同,则包含一个序列值。如果不是,你已经发现了你的错误。所以你的 table 是

Hash、Sequence(同一个Hash值内唯一)、TextString

你的唯一索引是

哈希、序列

要测试唯一性,请计算哈希值并尝试用零序列存储它。如果不能将其存储在序列零处,则比较序列零处的文本字符串。如果它们相同,您会发现重复的文本。如果它们不同,则尝试按序列 1 存储。重复直到您在该序列号处找到重复的文本字符串,或者您不会在使用下一个可用序列号将其存储在数据库中时失败。

诀窍是找出一种哈希算法,该算法不会给您带来很多重复项并且可以处理长文本字符串。如果有一个很棒的 ORM 可以为您完成这项工作,那就更好了。

关于mysql - 使用 MySQL InnoDB 对 JPA 中 TEXT 列的唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7432940/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com