SHA() 方法对于不同大小的相同二进制值给出不同的结果。
创建表 TEST_binary10_2 ( PK bigint NOT NULL, VERSION int NOT NULL, X1 二进制(1) DEFAULT NULL, X2 二进制(10) DEFAULT NULL, PRIMARY KEY (
));PK
插入TEST_binary10_2值(2,1,3,3);
从 TEST_binary10_2 中选择 PK、X1、X2、SHA(X1)、SHA(X2);
结果:即使 X1 和 X2 包含相同的字符串,您也可以观察到 SHA(X1) 和 SHA(X2) 不同。我想知道原因和解决办法。
您可能想要
VARBINARY
而不是 BINARY
。
https://dev.mysql.com/doc/refman/8.0/en/binary-varbinary.html
存储
值时,将使用填充值将其右填充到指定长度。填充值是BINARY
(零字节)。对于插入,值使用0x00
进行右侧填充,并且对于检索,不会删除任何尾随字节。所有字节在比较中都很重要,包括0x00
和ORDER BY
操作。 0x00 和空格的比较不同,0x00 排序在空格之前。DISTINCT
对于
,插入时没有填充,检索时也没有剥离任何字节。所有字节在比较中都很重要,包括VARBINARY
和ORDER BY
操作。DISTINCT
和 space 的比较不同,0x00
排序在 space 之前。0x00