mysql - SHA() 方法对于不同大小的二进制类型的相同值给出不同的结果

问题描述 投票:0回答:1

SHA() 方法对于不同大小的相同二进制值给出不同的结果。

  1. 创建了一个表,列的大小为 X1 二进制 (1)、X2 二进制 (10)。

创建表 TEST_binary10_2 ( PK bigint NOT NULL, VERSION int NOT NULL, X1 二进制(1) DEFAULT NULL, X2 二进制(10) DEFAULT NULL, PRIMARY KEY (

PK
));

  1. 为两列插入相同的文本。

插入TEST_binary10_2值(2,1,3,3);

  1. 尝试检索两者的 SHA(),即使它是相同的值,它也会返回不同的值。

从 TEST_binary10_2 中选择 PK、X1、X2、SHA(X1)、SHA(X2);

结果:即使 X1 和 X2 包含相同的字符串,您也可以观察到 SHA(X1) 和 SHA(X2) 不同。我想知道原因和解决办法。

sql mysql sha1
1个回答
0
投票

您可能想要

VARBINARY
而不是
BINARY

https://dev.mysql.com/doc/refman/8.0/en/binary-varbinary.html

存储

BINARY
值时,将使用填充值将其右填充到指定长度。填充值是
0x00
(零字节)。对于插入,值使用
0x00
进行右侧填充,并且对于检索,不会删除任何尾随字节。所有字节在比较中都很重要,包括
ORDER BY
DISTINCT
操作。 0x00 和空格的比较不同,0x00 排序在空格之前。

对于

VARBINARY
,插入时没有填充,检索时也没有剥离任何字节。所有字节在比较中都很重要,包括
ORDER BY
DISTINCT
操作。
0x00
和 space 的比较不同,
0x00
排序在 space 之前。

© www.soinside.com 2019 - 2024. All rights reserved.