2009-02-19 17 views
7

¿Cuál es el tamaño que usa para los campos comunes de la base de datos, como firstName, lastName, Email, password, etc.? Veo estos campos comunes en muchas bases de datos de blogs, foros, e-commerces, etc. Pero no sé si hay alguna referencia o defecto para el tamaño de esos campos comunes. Por lo tanto, quiero saber cuál es el método/referencia/base que debe usar para seleccionar el tamaño de los campos comunes.Tamaño predeterminado para los campos de la base de datos

+0

Ver: http://stackoverflow.com/questions/512614/what-are-the-recommended-database-column-sizes-for-names/ – PartialOrder

Respuesta

12

En parte, depende de su DBMS. Algunos, como MySQL 5, se preocupan por la longitud de una columna VARCHAR (n) en comparación con una columna TEXT de longitud ilimitada; otros, como PostgreSQL, consideran que TEXT y VARCHAR (n) son internamente idénticos, con la excepción de que se verifica una longitud en columnas VARCHAR (n). Escribir algo como VARCHAR (65536) en PostgreSQL es tonto; si desea una columna de longitud ilimitada, elija TEXT y termine con ella.

Por supuesto, a veces intentar almacenar un valor demasiado largo romperá su diseño, o permitirá que alguien abuse del sistema eligiendo un nombre largo sin espacios (por ejemplo). Por lo general, lo que hago para los campos de nombre de usuario como ese es simplemente elegir una longitud superior para que cualquiera que quiera un nombre de usuario más largo intente causar problemas; 64 caracteres es un buen valor redondo y parece funcionar bien. Para los nombres y direcciones reales (que no se muestran con frecuencia a los usuarios como un nombre de usuario), querrá ir con algo más de tiempo. Desea un valor lo suficientemente grande como para aceptar cualquier entrada válida, pero no tan grande que alguien pueda rellenar una cadena de un gigabyte de largo en el campo solo para atacar su sistema. 1024 caracteres es bastante razonable: 1k es una cantidad de texto lo suficientemente pequeña para trabajar fácilmente, un número redondo y más grande que cualquier otra línea de dirección o nombre.

Las direcciones de correo electrónico pueden tener un máximo de 320 caracteres por cada RFC asociado cuyo número soy perezoso para buscar en este momento. Entonces está la longitud de tu campo de correo electrónico. Resulta que SMTP limita la longitud de los campos a 256 caracteres; dado que las direcciones de correo electrónico deben estar entre corchetes, la dirección de correo electrónico válida más larga es en realidad de 254 caracteres. (This page entra en más detalles.) Así que hay la longitud de su campo de correo electrónico.

contraseñas deben NUNCA almacenarse en texto plano, por lo que su campo de contraseña debe ser una matriz de bytes o BLOB escribir exactamente el tiempo suficiente para almacenar la salida de la función hash que está utilizando (o mayor elemento del grupo criptográfica en uso, para esquemas más avanzados como SRP-6a).

+5

Solo los programadores piensan que 64 es un "buen valor redondo" :) –

+1

Sabes, leí la línea "buen valor redondo" y no pensé en nada hasta que lo mencionaste también. :-) –

+1

Eso hace que para 3 de nosotros, ni siquiera pensé, de hecho, me dije a mí mismo "64 es un buen número redondo, tal vez incluso 128 si quieres un campo más grande", mi maldita mentalidad de programación y yo – UnkwnTech

1

Lo que tiendo a hacer es pensar en cuánto tiempo puede ser el valor de un campo, y luego duplicarlo para estar seguro.

E.g. Nombre: varchar (70) Email: varchar (200)

+0

Una dirección de correo electrónico puede tener hasta 320 caracteres. – PartialOrder

2

me gusta 16, 32, 64, 128, o 256

+0

raro pero tan cerca del mío - acabo de redondear el mío - 10, 20, ... 120, 250 – IEnumerator

+0

¡poderes de 2 hacen que la computadora sea feliz! –

1

el doble de su estimación. Y luego redoblarlos para acomodar unicode.

Las bases de datos que tienen varchars (casi todas lo hacen) incurren en una penalización muy pequeña para los campos que están diseñados para contener valores más largos pero no lo hacen. Puedes usar eso para tu ventaja.

1

Trate de pensar esto al revés: he utilizado datos existentes para obtener longitudes de campo razonables. Asumiendo que tiene acceso a una base de datos de buen tamaño llena con datos reales, una consulta rápida como:

SELECT MAX(LEN(lastname)) FROM dbo.MyDatabase 

le dará todo lo que necesita.

ACTUALIZACIÓN: No utilice el número que obtiene exactamente.Obviamente, rellene un poco dependiendo de su incertidumbre, a menos que tenga un conjunto de muestras muy grande.

Cuestiones relacionadas