# 数据类型 > 每种数据类型都必须指定大小(8位、16位、32位、1024字节等),不存在模糊的类型。 > 所有数字均按照小端字节序存储。 ## 数字 > 在类型中并没有无符号数,实际使用时如需无符号数,可以进行强制类型转换。 ### 类型列表 | 类型代号 | 类型 | 存储方式 | | --- | --- | --- | | 0 | int8 | 下一个哈希相同的数据项的指针(当值可重复时)+int8 | | 1 | int16 | 下一个哈希相同的数据项的指针(当值可重复时)+int16 | | 2 | int32 | 直接存储 | | 3 | int64 | 直接存储 | | 4 | float | 直接存储 | | 5 | double | 直接存储 | ## 字符串 > 字符串为变长的可索引的字节数组,长度最大不超过uint16(65535字节)。实际上出于性能考虑,实现时限制长度不超过`2048`字节。 > 一旦字符串插入表中,其长度就不再可变。如需改变需要删除再添加。 ### 类型列表 | 类型代号 | 类型 | 存储方式 | | --- | --- | --- | | 6 | string | 下一个哈希相同的数据项的指针+uint16长度+该长度的数据(字节数组) | ## 二进制数据块 > 二进制数据块为变长的不参与索引的字节数组,长度最大不超过uint16(65535字节)。实际上出于性能考虑,实现时限制长度不超过`2048`字节。 > 一旦二进制数据块插入表中,其长度就不再可变。如需改变需要删除再添加。 ### 类型列表 | 类型代号 | 类型 | 存储方式 | | --- | --- | --- | | 7 | binary | uint16长度+直接存储的数据(字节数组) | ## 类型修饰符 > 类型修饰符占据类型代号的高2位,通过或运算与基础代号结合 > 对于可空属性,会在其值前添加一字节,指示其是否为空,如果为空则为 true > 对于外键修饰符,将会在表头标明其外键连接到的表头指针 | 类型代号 | 类型 | 说明 | | --- | --- | --- | | 0x00 | null | 无修饰:允许重复、可空、非外键 | | 0x10 | unique | 不允许重复 | | 0x20 | nonnull | 非空 | | 0x40 | foreignkey | 外键 |