Проблема заключалась в том, что мне теперь нужно было использовать скобки CDATA, заключающие код XML, чтобы он работал должным образом.
Я использовал бы 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
механизм.
Выходной размер sha1 составляет 160 битов. Который является 160/8 == 20 символов (если Вы используете 8-разрядные символы), или 160/16 = 10 (при использовании 16-разрядных символов).
Таким образом, длина между 10 16-разрядными символами и 40 шестнадцатеричными цифрами.
В любом случае решите формат, Вы собираетесь сохранить, и сделать поле фиксированным размером на основе того формата. Тем путем у Вас не будет потраченного впустую пространства.