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 de longueur indéterminée?
http://dev.mysql.com/doc/refman/5.0/en/char.html
Les valeurs dans les colonnes VARCHAR sont des chaînes de longueur variable. La longueur peut être spécifiée avec une valeur comprise entre 0 et 255 avant MySQL 5.0.3 et entre 0 et 65 535 dans les versions 5.0.3 et ultérieures. La longueur maximale effective d'un VARCHAR dans MySQL 5.0.3 et versions ultérieures est fonction de la taille maximale de la ligne (65 535 octets, qui est partagée entre toutes les colonnes) et du jeu de caractères utilisé.Alors ...
<MySQL 5.0.3 utilise TEXT
ou
> = MySQL 5.0.3 utilise VARCHAR (2083)
VARCHAR(512)
(ou similaire) devrait suffire. Cependant, comme vous ne connaissez pas vraiment la longueur maximale des URL en question, je pourrais simplement aller directement à TEXT
. Le danger avec ceci est bien sûr une perte d'efficacité due au fait que CLOB
s est beaucoup plus lent qu'un type de données chaîne tel que VARCHAR
.
varchar(max)
pour SQLServer2005
varchar(65535)
pour MySQL 5.0.3 et versions ultérieures
Cela allouera du stockage en fonction des besoins et ne devrait pas affecter les performances.
Vous aurez le choix entre une colonne TEXT ou VARCHAR basée sur à quelle fréquence l'URL sera utilisée et si vous réellement avez besoin la longueur à délier.
Utilisez VARCHAR avec longueur maximale> = 2,083 as micahwittman suggéré si:
Utilisez TEXT si:
Vous devez utiliser un VARCHAR avec un codage de caractères ASCII. Les URL sont codées en pourcentage et les noms de domaine internationaux utilisent punycode pour que ASCII soit suffisant pour les stocker. Cela utilisera beaucoup moins d'espace que UTF8.
VARCHAR(512) CHARACTER SET 'ascii' COLLATE 'ascii_general_ci' NOT NULL
Cela dépend vraiment de votre cas d'utilisation (voir ci-dessous), mais le stockage en tant que TEXT
a des problèmes de performances, et un énorme VARCHAR
sonne comme étant excessif dans la plupart des cas.
Mon approche: utilise une longueur VARCHAR
généreuse, mais pas déraisonnablement grande, telle que VARCHAR(500)
ou plus, et encourage les utilisateurs qui ont besoin d'une URL plus grande à utiliser un raccourcisseur d'URL tel que comme safe.mn
.
L'approche Twitter: Pour une UX vraiment agréable, fournissez un raccourcisseur automatique d'URL pour les URL trop longues et stockez la "version d'affichage" du lien sous forme d'extrait d'URL avec des ellipses à la fin. (Exemple: http://stackoverflow.com/q/219569/1235702
serait affiché sous la forme stackoverflow.com/q/21956...
et créerait un lien vers une URL raccourcie http://ex.ampl/e1234
.)
Notes et mises en garde
La plupart des navigateurs vous permettent de mettre de très grandes quantités de données dans une URL et ainsi beaucoup de choses finissent par créer de très grandes URLs, donc si vous parlez de quelque chose de plus que la partie domaine d'une URL dont vous aurez besoin d'utiliser une colonne TEXT depuis le VARCHAR/CHAR sont limités .
Je ne connais pas les autres navigateurs, mais IE7 a une limite de 2083 caractères pour les opérations HTTP GET . À moins que d'autres navigateurs aient des limites plus basses, je ne vois pas pourquoi vous auriez besoin de plus de caractères que 2083.
La plupart des serveurs Web ont une limite de longueur d'URL (c'est pourquoi il existe un code d'erreur pour "URI too long"), ce qui signifie qu'il existe une taille supérieure pratique. Recherchez la limite de longueur par défaut pour les serveurs Web les plus populaires et utilisez le plus grand d'entre eux comme taille maximale du champ. cela devrait être plus que suffisant.
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 permettra également d'économiser votre espace.
Le spécificateur max étend les capacités de stockage des types de données varchar, nvarchar et varbinary. varchar (max), nvarchar (max) et varbinary (max) sont collectivement appelés types de données de grande valeur. Vous pouvez utiliser les types de données de grande valeur pour stocker jusqu'à 2 ^ 31-1 octets de données.
Voir cet article sur TechNet à propos de l’utilisation de types de données de grande valeur.