
# 账本数据库使用的数据类型
账本数据库使用HASH16数据类型来存储行级hash摘要或表级hash摘要，使用HASH32数据类型来存储全局hash摘要或者历史表校验hash。
表1账本数据库HASH类型 
| 名称     | 描述                  | 存储空间 | 范围                         |
|:---|:---|:---|:---|
| HASH16 | 以无符号64位整数存储。        | 8字节  | 0 \~ +18446744073709551615 |
| HASH32 | 以包含16个无符号整型元素数的组存储。 | 16字节 | 16个元素的无符号整型数组能够包含的取值范围。    |
   
HASH16数据类型用来在账本数据库中存储行级或表级hash摘要。在获得长度为16个字符的十六进制字符串的hash序列后，系统将调用hash16in函数将该序列转换为一个无符号64位整数存储进HASH16类型变量中。示例如下：
```
十六进制字符串：e697da2eaa3a775b   对应的无符号64位整数：16615989244166043483
十六进制字符串：ffffffffffffffff   对应的无符号64位整数：18446744073709551615
```
示例：
```
gaussdb=# CREATE TABLE hash16test(id int, data hash16);
gaussdb=# INSERT INTO hash16test VALUES (1, 'e697da2eaa3a775b');
gaussdb=# SELECT * FROM hash16test;
 id |               data
----+----------------------------------
  1 | e697da2eaa3a775b
(1 row)
gaussdb=# DROP TABLE hash16test;
```
HASH32数据类型用来在账本数据库中存储全局hash摘要或者历史表校验hash。在获得长度为32个字符的十六进制字符串的hash序列后，系统将调用hash32in函数将该序列转换到一个包含16个无符号整型元素的数组中。示例如下：
```
十六进制字符串：685847ed1fe38e18f6b0e2b18c00edee 
对应的HASH32数组：[104,88,71,237,31,227,142,24,246,176,226,177,140,0,237,238]
```
示例：
```
gaussdb=# CREATE TABLE hash32test(id int, data hash32);
gaussdb=# INSERT INTO hash32test VALUES (1, '685847ed1fe38e18f6b0e2b18c00edee');
gaussdb=# SELECT * FROM hash32test;
 id |               data
----+----------------------------------
  1 | 685847ed1fe38e18f6b0e2b18c00edee
(1 row)
gaussdb=# DROP TABLE hash32test;
```
