Лучший тип поля базы данных для URL - PullRequest
319 голосов
/ 20 октября 2008

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

Ответы [ 10 ]

302 голосов
/ 20 октября 2008
  1. Наименьший общий знаменатель максимальная длина URL среди популярных веб-браузеров: 2,083 (Internet Explorer)

  2. http://dev.mysql.com/doc/refman/5.0/en/char.html
    Значения в столбцах VARCHAR являются строками переменной длины. Длина может быть указана как значение от 0 до 255 до MySQL 5.0.3 и от 0 до 65 535 в 5.0.3 и более поздних версиях. Максимальная эффективная длина VARCHAR в MySQL 5.0.3 и более поздних версиях зависит от максимального размера строки (65 535 байт, который используется всеми столбцами) и используемого набора символов.

  3. Итак ...
    TEXT
    или
    > = MySQL 5.0.3 использует VARCHAR (2083)

31 голосов
/ 20 октября 2008

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

16 голосов
/ 20 октября 2008

varchar(max) для SQLServer2005

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

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

9 голосов
/ 18 декабря 2015

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

VARCHAR(512) CHARACTER SET 'ascii' COLLATE 'ascii_general_ci' NOT NULL
9 голосов
/ 23 мая 2013

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

Используйте VARCHAR с максимальной длиной> = 2,083 как micahwittman Рекомендуется, если:

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

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

  1. URL-адрес действительно может превышать предел строки в 65 535 байт
  2. Ваши запросы не будут выбирать или обновлять несколько URL-адресов сразу (или очень часто). Это связано с тем, что столбцы TEXT просто содержат встроенный указатель, и случайный доступ, связанный с получением ссылочных данных, может быть болезненным.
4 голосов
/ 08 сентября 2014

Это действительно зависит от вашего варианта использования (см. Ниже), но сохранение как 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 только для слишком длинных ссылок.
4 голосов
/ 20 октября 2008

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

3 голосов
/ 20 октября 2008

Я не знаю о других браузерах, но IE7 имеет ограничение в 2083 символа для операций HTTP GET . Если в других браузерах не установлены более низкие ограничения, я не понимаю, зачем вам нужно больше символов, чем 2083.

1 голос
/ 20 октября 2008

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

0 голосов
/ 19 декабря 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...