Мне нужно сохранить URL-адрес в таблице MySQL. Какая наилучшая практика для определения поля, которое будет содержать URL с неопределенной длиной?
Лучший тип поля базы данных для URL-адреса
Ответ 1
Наименьшая общая длина знаменателя max URL среди популярных веб-браузеров: 2,083 (Internet Explorer) p >
http://dev.mysql.com/doc/refman/5.0/en/char.html
Значения в столбцах VARCHAR представляют собой строки переменной длины. Длина может быть указана как значение от 0 до 255 до MySQL 5.0.3 и от 0 до 65535 в 5.0.3 и более поздних версиях. Эффективная максимальная длина VARCHAR в MySQL 5.0.3 и более поздних версиях зависит от максимального размера строки (65 535 байт, которая распределяется между всеми столбцами) и используемого набора символов.Итак... < MySQL 5.0.3 использует ТЕКСТ
или
>= MySQL 5.0.3 использует VARCHAR (2083)
Ответ 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 для слишком длинных ссылок.
Ответ 8
Я не знаю о других браузерах, но IE7 имеет ограничение на 2083 символа для операций HTTP GET. Если у каких-либо других браузеров есть более низкие пределы, я не понимаю, зачем вам нужны больше символов, чем 2083.
Ответ 9
Лучше использовать varchar (max), который (с точки зрения размера) означает varchar (65535)
.
Это даже сохранит ваши большие веб-адреса и сохранит ваше пространство.
Максимальный спецификатор расширяет возможности хранения varchar, nvarchar и varbinary. varchar (max), nvarchar (max) и varbinary (max) совместно называются крупномасштабными типами данных. Ты можешь используйте типы данных большого значения для хранения до 2 ^ 31-1 байтов данных.
См. в этой статье в TechNet об использовании больших типов данных
Ответ 10
Большинство веб-серверов имеют ограничение по длине URL (поэтому есть код ошибки для "URI слишком длинный" ), что означает, что существует практический верхний размер. Найдите ограничение по умолчанию для самых популярных веб-серверов и используйте самый большой из них в качестве максимального размера поля; его должно быть более чем достаточно.