[英]Best data type for hex values in Oracle database
在 Oracle 数据库中存储十六进制值的最佳数据类型是什么? 使用像这样的 33 字节值:
0x54906a620d3c1e82c8e812b0f8d1214beafc05c74820c1dd3675b0c38f4a83aa
是否有一种首选数据类型将:
a) 使用最少的磁盘空间,b) 可以通过完整的字符串进行查询吗?
要存储该值,我可以使用VARCHAR2(132)
。 但这会占用磁盘上的 132 字节还是 33 字节?
如果它在磁盘上使用 132 个字节,那么我可以使用什么数据类型来存储仅 33 个字节? 该数据类型是否允许我在查询中使用完整的字符串,例如:
SELECT * FROM TABLE WHERE FIELD = '0x54906a620d3c1e82c8e812b0f8d1214beafc05c74820c1dd3675b0c38f4a83aa'
或者在 SQL 查询中使用之前是否需要我将 132 个字符转换为 33 个字节?
如果“a8”是单个字节的十六进制值,varchar2 会存储 1 个字节,还是会存储 2 个字节(一个用于字母“a”,一个用于数字 8)?
后者,如果您将其存储为字符串。
您可以存储为RAW :
这些数据类型用于二进制数据或字节串。
例如:
create table test (hex_value raw(128));
insert into test (hex_value) values (hextoraw('54906a620d3c1e82c8e812b0f8d1214beafc05c74820c1dd3675b0c38f4a83aa'));
select hex_value, dump(hex_value)
from test
where hex_value = hextoraw('54906a620d3c1e82c8e812b0f8d1214beafc05c74820c1dd3675b0c38f4a83aa');
HEX_VALUE | 转储(HEX_VALUE) |
---|---|
0x54906A620D3C1E82C8E812B0F8D1214BEAFC05C74820C1DD3675B0C38F4A83AA | Typ=23 Len=32: 84,144,106,98,13,60,30,130,200,232,18,176,248,209,33,75,234,252,5,199,72,32,193,221,54,117,176,195,143,74,131,170 |
你可以从转储中看到它存储在 32 字节中。 (RAW 值隐式转换为字符串以供显示,db<>fiddle 添加了0x
;其他客户端不会显示该值,并且可能根本不显示 RAW 值。)
如果需要,您可以转换回字符串,这将是 64 字节:
select rawtohex(hex_value), dump(rawtohex(hex_value)) from test;
RAWTOHEX(HEX_VALUE) | 转储(RAWTOHEX(HEX_VALUE)) |
---|---|
54906A620D3C1E82C8E812B0F8D1214BEAFC05C74820C1DD3675B0C38F4A83AA | Typ=1 Len=64: 53,52,57,48,54,65,54,50,48,68,51,67,49,69,56,50,67,56,69,56,49,50 ,66,48,70,56,68,49,50,49,52,66,69,65,70,67,48,53,67,55,52,56,50,48,67,49,68 ,68,51,54,55,53,66,48,67,51,56,70,52,65,56,51,65,65 |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.