Хранение значений хэш-функции SHA1 в MySQL

Проблема заключалась в том, что мне теперь нужно было использовать скобки CDATA, заключающие код XML, чтобы он работал должным образом.

154
задан Gumbo 6 December 2009 в 17:42
поделиться

4 ответа

Я использовал бы VARCHAR для данных переменной длины, но не с данными фиксированной длины. Поскольку значение SHA-1 всегда 160 битов длиной, VARCHAR просто потратил бы впустую дополнительный байт для длины поля фиксированной длины.

И я также не сохранил бы значение SHA1 возвращается. Поскольку это использует всего 4 бита за символ и таким образом нуждалось бы в 160/4 = 40 символов. Но если бы Вы используете 8 битов за символ, Вам только был бы нужен 160/8 = 20 символьных длинных полей.

Таким образом, я рекомендую Вам использовать BINARY(20) и UNHEX функционируйте для преобразования SHA1 оцените двоичному файлу.

Я сравнил требования устройства хранения данных для BINARY(20) и CHAR(40).

CREATE TABLE `binary` (
    `id` int unsigned auto_increment primary key,
    `password` binary(20) not null
);
CREATE TABLE `char` (
    `id` int unsigned auto_increment primary key,
    `password` char(40) not null
);

С миллионом записей binary(20) берет 44.56M, в то время как char(40) берет 64.57M. InnoDB механизм.

306
ответ дан ESG 23 November 2019 в 21:59
поделиться

Хеш SHA1 является 40 символами долго!

43
ответ дан schmilblick 23 November 2019 в 21:59
поделиться

Выходной размер sha1 составляет 160 битов. Который является 160/8 == 20 символов (если Вы используете 8-разрядные символы), или 160/16 = 10 (при использовании 16-разрядных символов).

6
ответ дан inazaruk 23 November 2019 в 21:59
поделиться

Таким образом, длина между 10 16-разрядными символами и 40 шестнадцатеричными цифрами.

В любом случае решите формат, Вы собираетесь сохранить, и сделать поле фиксированным размером на основе того формата. Тем путем у Вас не будет потраченного впустую пространства.

3
ответ дан Douglas Leeder 23 November 2019 в 21:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: