Мы используем функцию Hash-Key для одной из исходных таблиц, чтобы создать уникальный ключ-идентификатор. Но функция Hash-Key имеет некоторые ограничения по отношению к 32-битному целому числу. Мы пытались использовать MD5, но мы не хотим использовать ключ на основе Char для данных на основе Char.
Каковы другие функции, связанные с хэш-ключом, для ключей таблицы БД?
Ответы (1)
Вы можете найти этот вопрос, который я задал, интересным для дальнейшего чтения. Один из ответов ссылается на эту страницу документации MySQL. который предлагает использовать поле VARBINARY
для строк с произвольными значениями байтов. Вы не отметили свой вопрос, поэтому я сформулирую остальную часть этого ответа с точки зрения MySQL; надеюсь, выбранная вами РСУБД не слишком сложна для перевода.
Многие функции шифрования и сжатия возвращают строки, результат которых может содержать произвольные значения байтов. Если вы хотите сохранить эти результаты, используйте столбец с двоичным строковым типом данных
VARBINARY
илиBLOB
. Это позволит избежать потенциальных проблем с удалением завершающего пробела или преобразованием набора символов, которые могут изменить значения данных, например, если вы используете недвоичный строковый тип данных (CHAR
,VARCHAR
,TEXT
).
Выход хэш-функции — это очень длинное число. Вы часто видите их как строки, потому что многие библиотеки кода отображают их в каком-то закодированном формате (шестнадцатеричном или Base32). Как говорится в вашем вопросе, помещать их в недвоичные строковые поля - плохая идея и пустая трата места и времени поиска. Поэтому заставьте ваше приложение преобразовывать вывод хэша в двоичные данные (чаще всего byte[]
) и сохранять их в столбце VARBINARY
.
Другой вариант — оставить его в виде строки и закодировать в Base32 (5 бит на байт), что занимает значительно меньше места, чем шестнадцатеричное (4 бита на байт) — на 25% меньше, если быть точным. Главное преимущество этого заключается в том, что строки остаются удобочитаемыми для человека и могут передаваться по обычным протоколам без дальнейшего кодирования. Это упрощает сопоставление вашей базы данных с видимыми в Интернете данными, что может сэкономить много времени на разработку и отладку. Затем установите для столбца тип сопоставления _bin
a>, что ускоряет сравнение ценой потери чувствительности к регистру.
Обратите внимание, что вы не можете использовать этот трюк с кодировкой Base64 (6 бит на байт), потому что вывод base64 сам по себе чувствителен к регистру.