Подтвердить что ты не робот

Лучший тип поля базы данных для URL-адреса

Мне нужно сохранить URL-адрес в таблице MySQL. Какая наилучшая практика для определения поля, которое будет содержать URL с неопределенной длиной?

4b9b3361

Ответ 1

Ответ 2

VARCHAR(512) (или аналогичного) должно быть достаточно. Однако, поскольку вы не знаете максимальную длину рассматриваемых URL-адресов, я могу просто перейти непосредственно к TEXT. Опасность с этим - это, конечно, потеря эффективности из-за того, что CLOB намного медленнее, чем простой строковый тип данных, например VARCHAR.

Ответ 3

varchar (max) для SQLServer2005

varchar (65535) для MySQL 5.0.3 и более поздних версий

Это будет распределять память по мере необходимости и не должно влиять на производительность.

Ответ 4

Вы должны использовать VARCHAR с кодировкой ASCII. URL-адреса кодируются в процентах, а международные доменные имена используют punycode, поэтому для их хранения достаточно ASCII. Это будет использовать гораздо меньше места, чем UTF8.

VARCHAR(512) CHARACTER SET 'ascii' COLLATE 'ascii_general_ci' NOT NULL

Ответ 5

Вы хотите выбрать между столбцом TEXT или VARCHAR, исходя из того, как часто будет использоваться URL-адрес, и действительно ли вам нужно, чтобы длина была несвязанной.

Используйте VARCHAR с maxlength >= 2,083 как micahwittman, если:

  • Вы будете использовать много URL-адресов для каждого запроса (в отличие от столбцов TEXT, VARCHAR хранятся в строке со строкой)
  • Вы уверены, что URL-адрес никогда не будет превышать лимит строк 65535 байт.

Используйте ТЕКСТ, если:

  • URL-адрес действительно может нарушить предел строки в 65535 байт
  • Ваши запросы не будут выбирать или обновлять сразу несколько URL-адресов (или очень часто). Это связано с тем, что столбцы TEXT содержат только указатель внутри строки, и случайный доступ, связанный с получением ссылочных данных, может быть болезненным.

Ответ 6

Большинство браузеров позволят вам помещать очень большие объемы данных в URL, и, таким образом, многие вещи создают очень большие URL-адреса, поэтому, если вы говорите о чем-либо больше, чем о доменной части URL-адреса, вам нужно будет использовать столбец TEXT, поскольку VARCHAR/ CHAR ограничены.

Ответ 7

Это действительно зависит от вашего варианта использования (см. ниже), но сохранение в качестве TEXT имеет проблемы с производительностью, а огромный VARCHAR в большинстве случаев звучит как излишний.

Мой подход: используйте щедрую, но не неоправданно большую длину VARCHAR, например VARCHAR(500) или так, и поощряйте пользователей, которым нужен более крупный URL-адрес, использовать сокращенный URL-адрес, например safe.mn.

Подход Twitter:. Для действительно приятного UX укажите автоматический URL-адрес для длинного URL-адреса и сохраните "отображаемую версию" ссылки в виде фрагмента URL-адреса с эллипсами на конец. (Пример: http://stackoverflow.com/q/219569/1235702 будет отображаться как stackoverflow.com/q/21956... и будет ссылаться на сокращенный URL http://ex.ampl/e1234)

Заметки и предостережения

  • Очевидно, что подход Twitter более приятный, но для моих приложений достаточно рекомендовать сокращение URL-адресов.
  • У сокращений URL есть свои недостатки, например проблемы безопасности. В моем случае это не очень большой риск, потому что URL-адрес не является общедоступным и не используется в значительной степени; однако это явно не сработает для всех. safe.mn, похоже, блокирует много спама и URL-адресов фишинга, но я бы по-прежнему рекомендовал соблюдать осторожность.
  • Обязательно обратите внимание, что вы не должны заставлять своих пользователей использовать URL-адрес. Для большинства случаев (по крайней мере, для моих приложений), 500 символов чрезмерно достаточны для того, для чего большинство пользователей будут его использовать. Используйте/рекомендуйте сокращение URL для слишком длинных ссылок.

Ответ 9

Лучше использовать varchar (max), который (с точки зрения размера) означает varchar (65535). Это даже сохранит ваши большие веб-адреса и сохранит ваше пространство.

Максимальный спецификатор расширяет возможности хранения varchar, nvarchar и varbinary. varchar (max), nvarchar (max) и varbinary (max) совместно называются крупномасштабными типами данных. Ты можешь используйте типы данных большого значения для хранения до 2 ^ 31-1 байтов данных.

См. в этой статье в TechNet об использовании больших типов данных

Ответ 10

Большинство веб-серверов имеют ограничение по длине URL (поэтому есть код ошибки для "URI слишком длинный" ), что означает, что существует практический верхний размер. Найдите ограничение по умолчанию для самых популярных веб-серверов и используйте самый большой из них в качестве максимального размера поля; его должно быть более чем достаточно.