Вы хотите каким-то образом сохранить длинную строку в коротком (э) пространстве. Стратегия зависит от ваших потребностей. Несколько вещей для рассмотрения:
- Вам нужно проиндексировать поле (чтобы выполнить
SELECT
на основании этого?)
- Вам нужно сравнить строки на равенство? Если да, допустимы ли ложные срабатывания?
- ...
У вас есть несколько вариантов, все с плюсами и минусами.
Правильный реляционный реферинг один-ко-многим
Как уже упоминалось, правильный способ сделать это - нормализовать ссылки. Таким образом, таблица из (id, interest)
кортежей и другой с (data-id, interest-id)
ссылками обеспечит без потери информации .
Обрезать строку
Например, 18 символов:
The quick brown fox jumps over the lazy dog -> The quick brown fo
The quick brown fox jumps over the fence -> The quick brown fo
Усечение приведет к потере информации всякий раз, когда результирующая длина будет короче входной строки. Это может или не может быть проблемой. В зависимости от входных строк усечение может выполняться с любого конца (или, на самом деле, где угодно) ввода.
Хэш строка
Например, md5 :
The quick brown fox jumps over the lazy dog -> 9e107d9d372bb6826bd81d3542a419d6
The quick brown fox jumps over the fence -> 26d68913b492ebb7fe734b973a358ab8
Опять же, это приводит к потере информации:
- Хеш-коллизии, поскольку выходное пространство (размер зависит от алгоритма) меньше, чем входное пространство (практически не ограничено)
- Хеширование является односторонней операцией
Однако, если вы можете жить с риском ложных срабатываний, это может быть жизнеспособным. Как упомянуто в комментарии @HansKesting, перед тем, как хэшировать (порядок, регистр), убедитесь, что значения массива нормализованы. Важным свойством этой стратегии является то, что длина хеша фиксирована.
Сжать строку
Например, выкачивают :
The quick brown fox jumps over the lazy dog <-> eJwLyUhVKCzNTM5WSCrKL89TSMuvUMgqzS0oVsgvSy1SKAFK5yRWVSqk5KcDAFvcD9o=
The quick brown fox jumps over the fence <-> eJwLyUhVKCzNTM5WSCrKL89TSMuvUMgqzS0oVsgvSy1SKAFKp6XmJacCAC1yDsE=
Сжатие строки дает вам возможность распаковать строку обратно в ее первоначальный вид. Недостатком является то, что выходная длина является переменной и неизвестной - и что один тип ввода лучше подходит для сжатия, чем другие.
В заключение , исходя из вашего вопроса и комментариев, только «правильный» реляционный путь кажется правильным, но хеширование может оказаться жизнеспособным.