使用TD14执行以下脚本。当我运行最终的SELECT时,HashedField返回F5-23-BA-34
,但HashedConstant返回2C-30-5B-4F
。
请注意,对于INSERT,我将常量No
限定为constant
,然后在该限定符上使用hashrow()
。当散列限定符进入时,它会按预期2C-30-5B-4F
进行。但是,当我尝试在select中散列字段本身时,我得到F5-23-BA-34
。这对我来说毫无意义。
create table mydb.mytable (
val VARCHAR(3) CHARACTER SET LATIN NOT CASESPECIFIC,
prehashedval byte(4)
);
insert into mydb.mytable
select 'No' constant, hashrow(constant);
select
hashrow(val) HashedField,
prehashedval,
hashrow('No') HashedConstant
from mydb.mytable;
答案 0 :(得分:2)
它不是同一个字符串: - )
字符串文字始终使用Unicode,其哈希值与拉丁文不同:
CREATE VOLATILE TABLE mytable (
MyField VARCHAR(3) CHARACTER SET LATIN NOT CASESPECIFIC,
MyField_U VARCHAR(3) CHARACTER SET UNICODE NOT CASESPECIFIC
) ON COMMIT PRESERVE ROWS;
INSERT INTO mytable('No', 'No');
SELECT
HASHROW(MyField) HashedField,
HASHROW(TRANSLATE('No' USING unicode_to_latin)),
HASHROW(MyField_U) HashedField_U,
HASHROW('No')
FROM mytable;