如何确定oracle标准_散列函数输出的长度?
请问如何确定oracle标准_散列函数输出的大小 我有下表如何确定oracle标准_散列函数输出的长度?,oracle,hash,Oracle,Hash,请问如何确定oracle标准_散列函数输出的大小 我有下表 Create table Tbl1 ( ID number, Col_1 Varchar2(3000), Col_2 Varchar2(3000), Col_3 Varchar2(3000), Col_30 Varchar2(3000), Std_hash raw(**1000**) ); (该表有30个varchar2(3000)列。我们刚刚在此处指定了一些列) 以及以下更新声明 update tbl1 set std_hash =
Create table Tbl1 (
ID number,
Col_1 Varchar2(3000),
Col_2 Varchar2(3000),
Col_3 Varchar2(3000),
Col_30 Varchar2(3000),
Std_hash raw(**1000**)
);
(该表有30个varchar2(3000)列。我们刚刚在此处指定了一些列)
以及以下更新声明
update tbl1 set
std_hash = standard_hash (
ID||
nvl(Col_1 ,'') ||
nvl(Col_2,'') ||
nvl(Col_30,'')
);
我尝试使用max和length函数来确定std_散列中存储的值的最大长度,结果得到了40
select max(length(std_hash)) from tbl1
MAX(LENGTH(STD_HASH))
---------------------
**40**
列STD_Hash存储表中每行的哈希值。这是否意味着在通过放置Raw(1000)创建表tbl1时,我最初高估了标准哈希值的输出长度的大小
提前谢谢 这取决于你实际上在做什么
STANDARD_HASH
接受两个参数;您提供了第一个,但没有提供方法(哈希算法的名称)。有效值为:
- SHA1、SH256、SH384、SH512、MD5
SQL> select
2 length(standard_hash('x', 'SHA1')) sha1,
3 length(standard_hash('x', 'SHA256')) sha256,
4 length(standard_hash('x', 'SHA384')) sha384,
5 length(standard_hash('x', 'SHA512')) sha512,
6 length(standard_hash('x', 'MD5')) md5
7 from dual;
SHA1 SHA256 SHA384 SHA512 MD5
---------- ---------- ---------- ---------- ----------
40 64 96 128 32
SQL>
由于您没有使用该方法,因此正在使用SHA1,结果的长度为40
-您注意到的值。这意味着您可以将列创建为
Std_hash raw(40)
而不是
1000
。但是,如果您决定指定另一种方法,则可能需要更改列大小(从32更改为128)。这取决于您实际执行的操作
STANDARD_HASH
接受两个参数;您提供了第一个,但没有提供方法(哈希算法的名称)。有效值为:
- SHA1、SH256、SH384、SH512、MD5
SQL> select
2 length(standard_hash('x', 'SHA1')) sha1,
3 length(standard_hash('x', 'SHA256')) sha256,
4 length(standard_hash('x', 'SHA384')) sha384,
5 length(standard_hash('x', 'SHA512')) sha512,
6 length(standard_hash('x', 'MD5')) md5
7 from dual;
SHA1 SHA256 SHA384 SHA512 MD5
---------- ---------- ---------- ---------- ----------
40 64 96 128 32
SQL>
由于您没有使用该方法,因此正在使用SHA1,结果的长度为40
-您注意到的值。这意味着您可以将列创建为
Std_hash raw(40)
而不是
1000
。但是,如果您决定指定另一种方法,则可能需要更改列大小(从32更改为128)。Hi@Littlefoot。谢谢!是的,我只使用默认选项。还有一个问题,我的高估会让我损失很多空间吗?比如说,如果我指定Raw(1000),这是否意味着数据库将分配Raw(1000)所需的空间(如CHAR数据类型)或它仍然是variant(如Varchar2数据类型)?谢谢不客气。正如文档()所说,“RAW是一种可变长度的数据类型,类似于VARCHAR2字符数据类型”。感谢您的帮助!你帮助我解决了我的问题嗨,小脚丫。谢谢!是的,我只使用默认选项。还有一个问题,我的高估会让我损失很多空间吗?比如说,如果我指定Raw(1000),这是否意味着数据库将分配Raw(1000)所需的空间(如CHAR数据类型)或它仍然是variant(如Varchar2数据类型)?谢谢不客气。正如文档()所说,“RAW是一种可变长度的数据类型,类似于VARCHAR2字符数据类型”。感谢您的帮助!你帮助我解决了我的问题