在 MySQL 中存储 SHA1 哈希值:VARCHAR 与 BINARY
在 MySQL 数据库中存储 SHA1 哈希结果时,适当的必须仔细考虑字段类型和长度。与常见做法相反,为此目的使用 VARCHAR 字段效率很低。
VARCHAR 与 BINARY
SHA1 哈希值始终为 160 位长。 VARCHAR 字段是为可变长度数据设计的,但它们为字段长度引入了一个字节的开销。因此,对于固定长度值(例如 SHA1 哈希)使用 VARCHAR 是不必要的。
另一方面,二进制字段存储二进制数据,没有任何开销。它们非常适合 SHA1 哈希等固定长度值。
字符表示
SHA1 哈希通常表示为十六进制字符串,每个字符使用 4 位。要将 SHA1 哈希的十六进制表示形式存储在 VARCHAR 字段中,需要 160/4 = 40 个字符。然而,二进制字段每个字符使用 8 位,允许将相同的哈希存储在 160/8 = 20 个字符的字段中。
推荐方法
它是建议使用 BINARY(20) 在 MySQL 中存储 SHA1 哈希值。此字段类型消除了与 VARCHAR 相关的开销,并允许有效存储哈希。此外,UNHEX 函数可用于将哈希的十六进制表示形式转换为二进制,然后将其存储到数据库中。
存储比较
存储要求的比较表明 BINARY(20) 比 CHAR(40) 存储 SHA1 哈希值更有效。例如,对于数百万条记录,BINARY(20) 需要大约 44.56M 的存储空间,而 CHAR(40) 需要 64.57M 的存储空间。随着数据集的增大,这种差异变得更加明显。
以上是在 MySQL 中存储 SHA1 哈希值:VARCHAR 还是 BINARY?的详细内容。更多信息请关注PHP中文网其他相关文章!