2011-01-28 31 views
5

Estoy construyendo una tabla que recibirá diferentes valores en un campo, piense en una tabla de registro que el campo "valor" puede ser un número, una cadena pequeña o un texto grande, etc.
Así que me pregunto si debería cree ese campo de "valor" como Texto o cree dos campos, uno para entradas pequeñas, como fecha, números y alguna cadena y otro solo para las entradas de Textos.Use varchar o texto para un campo dinámico en mysql?

Por lo tanto, mi pregunta es esta: ¿Este campo de "valor" debe ser Varchar junto con algún otro "valor2" como Texto o crear un campo Texto que el mysql gestionará correctamente?

Me temo que crear solo un campo de texto puede ser malo para el rendimiento.

EDIT: el número, fecha y hora, etc. van a ser echado como cadena antes de la inserción, eso no es el punto

Gracias,
Joe

+0

¿O tal vez simplemente no deberías hacer algo así? ¿Cuál es el propósito de esta tabla? – Mchl

+0

son un lote de comandos. Los usuarios pueden crear objetos pero no se guardarán hasta que el administrador – Jonathan

+0

los apruebe y debo ser capaz de mostrar a otros usuarios que hay actualizaciones o inserciones para esos objetos, para que no creen ni actualicen lo mismo – Jonathan

Respuesta

3

¿Sabes qué tan grande será la entrada más grande? Si impone un límite, o sabe qué tan grande será la entrada máxima, entonces podría usar varchar (que tiene un límite de 255 caracteres en las versiones < 5.0.3 y 65.535 en las versiones> = 5.0.3). De lo contrario, probablemente estés mejor con Text, ya que contiene significativamente más (65,535 * 2^16-1).

Como alternativa, si los usuarios están creando cosas que ya tienen tablas (como agregar eventos a un calendario), simplemente podría poner una columna "is_approved" en la tabla y mostrar solo las aprobadas, o buscar en todo verifica si hay duplicados.

http://dev.mysql.com/doc/refman/5.0/en/string-type-overview.html

+1

TEXT también tiene un límite de 2^16-1 = 65535B (bytes, no caracteres, cuidado con las codificaciones multibyte). MEDUIMTEXT es 2^24-1 y LONGTEXT 2^32-1. – Mchl

0

El campo varchar puede manejar la entrada diferente del que usted está mencionando pero como una cadena, no como un entero o fecha y hora.

+0

sí, las cosas se lanzarán como una cadena antes de insertarse en el campo, pero pueden ser cosas muy pequeñas como un booleano 0, -1 o un texto completo como una descripción de un producto. Mi pregunta es si puedo tener un texto de campo para manejar esto o si debo crear un varchar y un texto para manejarlos. o incluso específico, cree uno de cada tipo, como int, float, datetime, varchar, text etc ... – Jonathan

+0

Un único campo varchar puede contener todos estos. – programmer

1

Si hay un límite a la longitud de que los datos almacenados uso varchar() (como MySQL 5.0.3 varchar longitud máxima puede ser de hasta 65.535)

Si no hay ningún límite concreto entonces usa un tipo de campo 'texto'.

+0

Que también está limitado a 65535B ... – Mchl

+0

@Mchl, eso es cierto, sin embargo, si conoce el límite superior (y es menor que 65,535) entonces usar varchar() es más eficiente para trabajar con el db. – RDL

+0

Entonces, ¿por qué estás sugiriendo TEXTO para valores de más de 64 kB? ;) Al menos sugiera [MEDIUM | LONG] TEXT. Recuerde también que MyISAM solo puede contener 64kB por fila (BLOB/TEXT excluido) por lo que no puede tener una columna varchar de ancho completo. – Mchl

Cuestiones relacionadas