Meilleur type de champ de base de données pour une URL

j'ai besoin de stocker une url dans une table MySQL. Quelle est la meilleure pratique pour définir un champ qui contiendra une URL d'une longueur indéterminée?

294
demandé sur micahwittman 2008-10-20 23:29:04
la source

10 ответов

  1. plus petit dénominateur commun longueur maximale D'URL parmi les navigateurs Web populaires: 2,083 (Internet Explorer)

  2. http://dev.mysql.com/doc/refman/5.0/en/char.html

    les valeurs dans les colonnes de VARCHAR sont des chaînes de longueur variable. La longueur peut être spécifiée comme une valeur de 0 à 255 avant MySQL 5.0.3, et 0 à 65.535 dans 5.0.3 et versions ultérieures. La longueur maximale effective d'un VARCHAR dans MySQL 5.0.3 et plus tard est sujette à la taille maximale de la rangée (65,535 octets, qui est partagée entre toutes les colonnes) et le jeu de caractères utilisé.

  3. So ...

    < MySQL 5.0.3 utiliser TEXT

    ou

    > = MySQL 5.0.3 utiliser VARCHAR (2083)

278
répondu micahwittman 2008-10-20 23:55:27
la source

VARCHAR(512) (ou similaire) devrait suffire. Cependant, puisque vous ne connaissez pas vraiment la longueur maximale des URLs en question, je pourrais aller directement à TEXT . Le danger est bien sûr la perte d'efficacité due au fait que CLOB s est beaucoup plus lent qu'un simple type de chaîne de données comme VARCHAR .

32
répondu Daniel Spiewak 2008-10-20 23:31:31
la source

varchar(max) pour SQLServer2005

varchar(65535) pour MySQL 5.0.3 et plus tard

cela affectera le stockage selon les besoins et ne devrait pas affecter les performances.

16
répondu Bob Probst 2018-02-10 00:38:57
la source

vous voudrez choisir entre un texte ou une colonne de VARCHAR basé sur combien de fois L'URL sera utilisé et si vous réellement besoin de la longueur pour être non lié.

Utiliser VARCHAR avec maxlength >= de 2 083 comme micahwittman , a suggéré que si:

  1. vous utiliserez beaucoup D'URLs par requête (contrairement aux colonnes de texte, VARCHARs sont stockés en ligne avec la ligne)
  2. vous êtes assez sûr qu'une URL ne dépassera jamais la limite de ligne de 65.535 octets.

Utiliser TEXTE si :

  1. , L'URL est vraiment risquerait de rompre le 65 535 octets limite de ligne
  2. vos requêtes ne sélectionnent pas ou ne mettent pas à jour un tas d'URL à la fois (ou très souvent). C'est parce que les colonnes de texte tiennent juste un pointeur en ligne, et le aléatoire les accès nécessaires à la récupération des données référencées peuvent être douloureux.
9
répondu mrgrieves 2017-05-23 13:31:33
la source

vous devez utiliser une VARCHAR avec un codage de caractères ASCII. Les URLs sont codées en pourcentage et les noms de domaine internationaux utilisent punycode afin ASCII est suffisant pour les stocker. Cela prendra beaucoup moins d'espace que UTF8.

VARCHAR(512) CHARACTER SET 'ascii' COLLATE 'ascii_general_ci' NOT NULL
8
répondu Flavio Tordini 2015-12-18 13:00:03
la source

la plupart des navigateurs vous permettra de mettre très grandes quantités de données dans une URL et donc beaucoup de choses finissent par créer de très grandes URLs donc si vous parlez de quoi que ce soit de plus que la partie domaine d'une URL, vous aurez besoin d'utiliser une colonne de texte depuis le VARCHAR/CHAR sont limités .

4
répondu carson 2008-10-20 23:33:44
la source

cela dépend vraiment de votre cas d'utilisation (voir ci-dessous), mais stocker en tant que TEXT a des problèmes de performance, et un énorme VARCHAR semble être exagéré pour la plupart des cas.

Mon approche: utiliser un généreux, mais pas excessivement large VARCHAR de longueur, tels que VARCHAR(500) ou alors, et d'encourager les utilisateurs qui ont besoin d'un plus gros URL à utiliser un raccourcisseur d'URL comme safe.mn .

L'approche Twitter: pour un UX vraiment agréable, fournir un raccourci automatique D'URL pour les URL trop longues et stocker la" version d'affichage " du lien comme un fragment de L'URL avec des ellipses à la fin. (Exemple: http://stackoverflow.com/q/219569/1235702 serait affiché comme stackoverflow.com/q/21956... et serait lié à une URL raccourcie http://ex.ampl/e1234 )

Notes et mises en garde

  • évidemment, L'approche Twitter est plus agréable, mais pour les besoins de mon application, recommander une URL le raccourcisseur était suffisant.
  • Les raccourcisseurs D'URL
  • ont leurs inconvénients, comme des problèmes de sécurité. Dans mon cas, ce n'est pas un grand risque car les URL ne sont pas publiques et ne sont pas très utilisées; cependant, cela ne marchera évidemment pas pour tout le monde. en sécurité.mn semble bloquer beaucoup de spam et de phishing URLs, mais je recommande encore la prudence.
  • assurez-vous de noter que vous ne devriez pas forcer vos utilisateurs à utiliser un raccourci D'URL. Pour la plupart des cas (au moins pour mon application besoins), 500 caractères est trop suffisant pour ce que la plupart des utilisateurs vont l'utiliser pour. n'utiliser/recommander un raccourci D'URL que pour les liens trop longs.
4
répondu CullenJ 2016-04-27 01:09:49
la source

Je ne sais pas pour les autres navigateurs, mais IE7 a une limite de caractères de 2083 pour les opérations HTTP GET . Sauf si d'autres navigateurs ont des limites inférieures, Je ne vois pas pourquoi vous avez besoin de plus de caractères que 2083.

3
répondu matt b 2008-10-20 23:33:54
la source

vous feriez mieux d'utiliser varchar(max) qui (en termes de taille) signifie varchar (65535) . Cela permettra même de stocker vos plus grandes adresses web et de sauver votre espace ainsi.

le spécificateur max étend les capacités de stockage du varchar, nvarchar et varbinary. varchar(max), nvarchar(max), et varbinary (max) sont collectivement appelés types de données de grande valeur. Vous pouvez utilisez les types de données de grande valeur pour stocker jusqu'à 2^31-1 octets de données.

Voir cet article sur TechNet sur l'utilisation de l'Aide de Données de Grande Valeur "Types de 151940920"

1
répondu sohaiby 2016-02-24 15:33:44
la source

la plupart des serveurs web ont une limite de longueur D'URL (c'est pourquoi il y a un code d'erreur pour" URI trop long"), ce qui signifie qu'il y a une taille supérieure pratique. Trouver la limite de longueur par défaut pour les serveurs web les plus populaires, et utiliser le plus grand d'entre eux comme la taille maximale du champ; il devrait être plus que suffisant.

0
répondu CesarB 2008-10-20 23:50:11
la source

Autres questions sur sql mysql database