sql - tipos - Mejor tipo de campo de base de datos para una URL
ver campos de una tabla sql (10)
http://dev.mysql.com/doc/refman/5.0/en/char.html
Los valores en las columnas VARCHAR son cadenas de longitud variable. La longitud se puede especificar como un valor de 0 a 255 antes de MySQL 5.0.3 y de 0 a 65,535 en 5.0.3 y versiones posteriores. La longitud máxima efectiva de un VARCHAR en MySQL 5.0.3 y posterior está sujeta al tamaño máximo de fila (65.535 bytes, que se comparte entre todas las columnas) y al conjunto de caracteres utilizado.Asi que ...
<MySQL 5.0.3 use TEXT
o
> = MySQL 5.0.3 usa VARCHAR (2083)
Necesito almacenar un url en una tabla de MySQL. ¿Cuál es la mejor práctica para definir un campo que contendrá una URL con una longitud indeterminada?
Debe utilizar un VARCHAR con una codificación de caracteres ASCII. Las URL están codificadas en porcentaje y los nombres de dominio internacionales usan punycode, por lo que ASCII es suficiente para almacenarlos. Esto usará mucho menos espacio que UTF8.
VARCHAR(512) CHARACTER SET ''ascii'' COLLATE ''ascii_general_ci'' NOT NULL
Esto realmente depende de su caso de uso (ver a continuación), pero el almacenamiento como TEXT
tiene problemas de rendimiento, y un enorme VARCHAR
suena como una exageración para la mayoría de los casos.
Mi enfoque: use una longitud de VARCHAR
generosa, pero no demasiado grande, como VARCHAR(500)
o algo así, y aliente a los usuarios que necesitan una URL más grande a usar un acortador de URL como safe.mn
El enfoque de Twitter: para un UX realmente agradable, proporcione un acortador de URL automático para las URL excesivamente largas y almacene la "versión de visualización" del enlace como un fragmento de la URL con puntos suspensivos al final. (Ejemplo: http://.com/q/219569/1235702
se mostraría como .com/q/21956...
y se vincularía a una URL abreviada http://ex.ampl/e1234
)
Notas y advertencias
- Obviamente, el enfoque de Twitter es más agradable, pero para las necesidades de mi aplicación, recomendar un acortador de URL fue suficiente.
- Los acortadores de URL tienen sus inconvenientes, como las preocupaciones de seguridad. En mi caso, no es un gran riesgo porque las URL no son públicas y no se usan mucho; Sin embargo, esto obviamente no funcionará para todos. Safe.mn parece bloquear una gran cantidad de URL de spam y phishing, pero aun así recomendaría precaución.
- Asegúrese de tener en cuenta que no debe obligar a sus usuarios a utilizar un acortador de URL. Para la mayoría de los casos (al menos para las necesidades de mi aplicación), 500 caracteres son demasiado suficientes para lo que la mayoría de los usuarios la usarán. Solo use / recomiende un acortador de URL para enlaces demasiado largos.
La mayoría de los navegadores le permitirán poner cantidades muy grandes de datos en una URL y, por lo tanto, muchas cosas terminarán creando URL muy grandes, por lo que si está hablando de algo más que la parte del dominio de una URL, necesitará usar una columna TEXTO ya que http://dev.mysql.com/doc/refman/5.0/en/char.html .
La mayoría de los servidores web tienen un límite de longitud de URL (por lo que hay un código de error para "URI demasiado largo"), lo que significa que hay un tamaño superior práctico. Encuentre el límite de longitud predeterminado para los servidores web más populares, y use el mayor de ellos como el tamaño máximo del campo; debería ser más que suficiente
Mejor use varchar(max) que (en términos de tamaño) significa varchar (65535)
. Esto incluso almacenará sus direcciones web más grandes y también le ahorrará espacio.
El máximo especificador expande las capacidades de almacenamiento de los tipos de datos varchar, nvarchar y varbinary. Varchar (max), nvarchar (max) y varbinary (max) se denominan colectivamente tipos de datos de gran valor. Puede usar los tipos de datos de gran valor para almacenar hasta 2 ^ 31-1 bytes de datos.
Vea este artículo en TechNet sobre el uso de tipos de datos de gran valor.
No sé sobre otros navegadores, pero IE7 tiene un límite de 2083 caracteres para las operaciones HTTP GET . A menos que otros navegadores tengan límites más bajos, no veo por qué necesitaría más caracteres que 2083.
Usted querrá elegir entre una columna de TEXTO o VARCHAR en función de la frecuencia con la que se usará la URL y si realmente necesita que la longitud no esté unida.
Use VARCHAR con maxlength> = 2,083 como sugirió si:
- Usará una gran cantidad de URL por consulta (a diferencia de las columnas TEXTO, los VARCHAR se almacenan en línea con la fila)
- Estás bastante seguro de que una URL nunca excederá el límite de fila de 65,535 bytes.
Use texto si:
- La URL realmente podría romper el límite de fila de 65,535 bytes
- Sus consultas no seleccionarán ni actualizarán un montón de URL a la vez (o muy a menudo). Esto se debe a que las columnas de TEXTO solo tienen un puntero en línea, y los accesos aleatorios involucrados en la recuperación de los datos de referencia pueden ser dolorosos.
VARCHAR(512)
(o similar) debería ser suficiente. Sin embargo, ya que realmente no sabes la longitud máxima de las URL en cuestión, podría ir directamente a TEXT
. El peligro con esto es, por supuesto, la pérdida de eficiencia debido a que CLOB
es mucho más lento que un tipo de datos de cadena simple como VARCHAR
.
varchar(max)
para SQLServer2005
varchar(65535)
para MySQL 5.0.3 y versiones posteriores
Esto asignará el almacenamiento como sea necesario y no debería afectar el rendimiento.