【发布时间】:2023-03-31 13:20:02
【问题描述】:
给定一系列数字(通常少于 20 个数值在 100 和 1000 之间但不一定)
例如 100、343、234、123、456、345、80、99、100
什么是好的校验和,例如最小化不同系列的不同数字的风险,(不同的顺序很重要,因为不同的数字)给出相同的校验和。
寻找在 PostgreSQL 9 和 Java 中可用的校验和
【问题讨论】:
标签: java postgresql checksum
给定一系列数字(通常少于 20 个数值在 100 和 1000 之间但不一定)
例如 100、343、234、123、456、345、80、99、100
什么是好的校验和,例如最小化不同系列的不同数字的风险,(不同的顺序很重要,因为不同的数字)给出相同的校验和。
寻找在 PostgreSQL 9 和 Java 中可用的校验和
【问题讨论】:
标签: java postgresql checksum
我建议转换为分隔字符串,然后在 Postgres 中使用 MD5(),在 Java 中使用 java.security.MessageDigest / getInstance("MD5")。
【讨论】:
我认为数组是这里最简单的解决方案:
db=# select '{2,4,5}'::int[] = '{2,4,5}'::int[];
?column?
----------
t
(1 row)
db=# select '{2,4,5}'::int[] = '{2,5,4}'::int[];
?column?
----------
f
(1 row)
虽然我认为您在这里不需要校验和,因为您可以如上所示直接操作整数数组 - 数组是一个值。但如果您需要哈希,您当然可以将其转换为文本并使用 md5:
db=# select md5('{2,4,5}'::int[]::text) = md5('{2,5,4}'::int[]::text);
?column?
----------
f
(1 row)
但又一次。如果我理解正确,您需要哈希,以便您可以比较系列。 Postgres 允许您在没有散列的情况下执行此操作 - 使用本机数据类型 integer[] - 整数数组,显然数组中的顺序很重要......
【讨论】: