DB2 在行插入时创建一个随机但唯一的字符标识符
DB2 creating a random but unique character identifier upon row insert
我目前在 DB2 table 中有一个列,该列通过字符加密值通过 Web 调用和过程传递。它是 CHARACTER(13) 类型,带有用于加密的 CSSID。
这已经成为通过多个 API 来适应的巨大痛苦,但最初是为了让我们在调用中使用一个唯一的 ID,而不是主键。
在 DB2-400 中,对于 13 个或更多字符的唯一且在插入时随机创建但不需要解密(只是一个普通字符串)的字符串来说,下一个最好的是什么?
有没有一种普遍适用的方法?我们不传递安全数据,因此不需要加密,但我们只需要一个随机创建的唯一字符
这条评论不适合放在评论区。
我无法访问 DB2-400(不再),但我在 DB2 10.5 中针对 Linux.
测试了以下代码
create sequence seq1;
select concat('A', varchar_format(next value for seq1, '000000000000')) as my_id
from sysibm.sysdummy1;
结果,如果你运行连续4次:
A0000000000001
A0000000000002
A0000000000003
A0000000000004
也许 DB2-400 中有类似的东西。
听起来您可能正在使用 GENERATE_UNIQUE()
GENERATE_UNIQUE function returns a bit data character string 13 bytes
long (CHAR(13) FOR BIT DATA)
实际上与加密没有任何关系...
在我看来,这几乎是生成唯一值而不是简单数字标识的理想解决方案。那么你遇到了什么问题?
尝试hex(generate_unique())
。它是独一无二的 CHAR(26)
字符串。
或 to_char(timestamp(generate_unique()), 'YYYYMMDDHH24MISSFF6')
。您也可以使用 to_char 函数的格式。比方说,使用像 FF6SSMIHH24DDMMYYYY
这样的反向格式可能会很有用,以避免在大量插入 activity.
时出现唯一索引页争用
我目前在 DB2 table 中有一个列,该列通过字符加密值通过 Web 调用和过程传递。它是 CHARACTER(13) 类型,带有用于加密的 CSSID。
这已经成为通过多个 API 来适应的巨大痛苦,但最初是为了让我们在调用中使用一个唯一的 ID,而不是主键。
在 DB2-400 中,对于 13 个或更多字符的唯一且在插入时随机创建但不需要解密(只是一个普通字符串)的字符串来说,下一个最好的是什么?
有没有一种普遍适用的方法?我们不传递安全数据,因此不需要加密,但我们只需要一个随机创建的唯一字符
这条评论不适合放在评论区。
我无法访问 DB2-400(不再),但我在 DB2 10.5 中针对 Linux.
测试了以下代码create sequence seq1;
select concat('A', varchar_format(next value for seq1, '000000000000')) as my_id
from sysibm.sysdummy1;
结果,如果你运行连续4次:
A0000000000001
A0000000000002
A0000000000003
A0000000000004
也许 DB2-400 中有类似的东西。
听起来您可能正在使用 GENERATE_UNIQUE()
GENERATE_UNIQUE function returns a bit data character string 13 bytes long (CHAR(13) FOR BIT DATA)
实际上与加密没有任何关系...
在我看来,这几乎是生成唯一值而不是简单数字标识的理想解决方案。那么你遇到了什么问题?
尝试hex(generate_unique())
。它是独一无二的 CHAR(26)
字符串。
或 to_char(timestamp(generate_unique()), 'YYYYMMDDHH24MISSFF6')
。您也可以使用 to_char 函数的格式。比方说,使用像 FF6SSMIHH24DDMMYYYY
这样的反向格式可能会很有用,以避免在大量插入 activity.