Мне нужно сохранить URL-адрес в таблице MySQL. Какая наилучшая практика для определения поля, которое будет содержать URL с неопределенной длиной?
Наименьшая общая длина знаменателя 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)
VARCHAR(512)
(или аналогичного) должно быть достаточно. Однако, поскольку вы не знаете максимальную длину рассматриваемых URL-адресов, я могу просто перейти непосредственно к TEXT
. Опасность с этим - это, конечно, потеря эффективности из-за того, что CLOB
намного медленнее, чем простой строковый тип данных, например VARCHAR
.
varchar (max) для SQLServer2005
varchar (65535) для MySQL 5.0.3 и более поздних версий
Это будет распределять память по мере необходимости и не должно влиять на производительность.
max
волшебным спецификатором ANSI SQL для увеличения размера VARCHAR по мере необходимости, или это просто мета-переменная для примера?
Вы должны использовать VARCHAR с кодировкой ASCII. URL-адреса кодируются в процентах, а международные доменные имена используют punycode, поэтому для их хранения достаточно ASCII. Это будет использовать гораздо меньше места, чем UTF8.
VARCHAR(512) CHARACTER SET 'ascii' COLLATE 'ascii_general_ci' NOT NULL
Вы хотите выбрать между столбцом TEXT или VARCHAR, исходя из того, как часто будет использоваться URL-адрес, и действительно ли вам нужно, чтобы длина была несвязанной.
Используйте VARCHAR с maxlength >= 2,083 как micahwittman, если:
Используйте ТЕКСТ, если:
Это действительно зависит от вашего варианта использования (см. ниже), но сохранение в качестве 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
)
Заметки и предостережения
Большинство браузеров позволят вам помещать очень большие объемы данных в URL, и, таким образом, многие вещи создают очень большие URL-адреса, поэтому, если вы говорите о чем-либо больше, чем о доменной части URL-адреса, вам нужно будет использовать столбец TEXT, поскольку VARCHAR/ CHAR ограничены.
Я не знаю о других браузерах, но IE7 имеет ограничение на 2083 символа для операций HTTP GET. Если у каких-либо других браузеров есть более низкие пределы, я не понимаю, зачем вам нужны больше символов, чем 2083.
Лучше использовать varchar (max), который (с точки зрения размера) означает varchar (65535)
.
Это даже сохранит ваши большие веб-адреса и сохранит ваше пространство.
Максимальный спецификатор расширяет возможности хранения varchar, nvarchar и varbinary. varchar (max), nvarchar (max) и varbinary (max) совместно называются крупномасштабными типами данных. Ты можешь используйте типы данных большого значения для хранения до 2 ^ 31-1 байтов данных.
См. в этой статье в TechNet об использовании больших типов данных
varchar (max)
- это синтаксис SQLServer, не подходящий для MySQL (как в первоначальном вопросе). Более того, это не означает varchar (65535)
поскольку 65535 - это максимальное количество символов ASCII в строке в mysql, поэтому оно зависит также от других полей и набора символов.
Большинство веб-серверов имеют ограничение по длине URL (поэтому есть код ошибки для "URI слишком длинный" ), что означает, что существует практический верхний размер. Найдите ограничение по умолчанию для самых популярных веб-серверов и используйте самый большой из них в качестве максимального размера поля; его должно быть более чем достаточно.