В BigQuery я использую функцию md5 как:
select md5('<<some string>>') as hashed
, которая всегда возвращает «==» в последней букве, например:
R7zlx09Yn0hn29V+nKn4CA==
Почему '== 'всегда идти с этим?
= из-за заполнения base64 .Тем не менее и согласно документации выходные данные должны быть байтами, но вместо этого выходные данные являются строкой base64.Вы можете проверить это с помощью следующего запроса:
=
SELECT MD5("Hello World") AS MD5,TO_HEX(MD5("Hello World")) AS BYTES,TO_BASE64(FROM_HEX(TO_HEX(MD5("Hello World")))) as BASE64
Со следующим выводом:
Row |MD5 |BYTES |BASE64 1 |sQqNsWTgdUEFt6mb5y4/5Q== |b10a8db164e0754105b7a99be72e3fe5 |sQqNsWTgdUEFt6mb5y4/5Q=
Вам нужно использовать TO_HEX, чтобы получить желаемое представление, так как md5 возвращает BYTES, и вам нужны строки:
BYTES
TO_HEX: Преобразует последовательность байтов в шестнадцатеричную строку STRING.Преобразует каждый байт в строке в виде двух шестнадцатеричных символов в диапазоне (0..9, a..f).
select TO_HEX(md5('123456')) as hashed
возвращает:
e10adc3949ba59abbe56e057f20f883e