2011-07-25 13 views
9

Estoy optimizando la base de datos y hay algo que no me queda claro sobre los tipos de datos de longitud fija.MySQL de longitud fija y tipos de datos de longitud variable

Por lo que sé estos tipos de datos son de longitud fija:

  • CHAR (n)
  • FECHA
  • TIEMPO
  • DATETIME
  • TINYINT
  • SMALLINT
  • MEDIUMINT
  • INT
  • FLOAT
  • DOBLE

Y estos son de longitud variable:

  • TEXTO
  • VARCHAR
  • BLOB

¡Corrígeme si me equivoco!

Ahora, mi pregunta es: ¿Estos tipos de datos son de longitud fija o de longitud variable?

  • TIMESTAMP
  • ENUM

Gracias.

+0

... esta es una pregunta muy amplia –

+0

Actualización para una mejor comprensión de mis preguntas. En realidad, solo quiero saber si lo que sé sobre los tipos de datos de longitud fija es correcto o no. Y TIMESTAMP, ENUM son tipos de datos de longitud fija o de longitud variable? (2 preguntas en total) –

+0

Las marcas de tiempo y las enumeraciones son tipos de longitud fija. – Karolis

Respuesta

10

No es correcto en algunos tipos de datos.

DATETIME/TIMESTAMP

TIMESTAMP y DATETIME son similares, sin embargo TIMESTAMP utiliza sólo la mitad del espacio de almacenamiento cuando se compara con DATETIME. Sin embargo, existen desventajas notables al usar TIMESTAMP, por lo que debe consultar los documentos oficiales para ver cuál necesita. Pero la mayor parte de la DATETIME sería la mejor opción.

Usted no tiene que preocuparse acerca de las longitudes FIX/variables para este tipo de datos

NÚMEROS

Usted es capaz de almacenar número entero mediante el establecimiento de un decir, longitud int(20) pero en términos de almacenamiento que no tiene diferencia y por lo tanto no tiene significado.

TINYINT SMALL INT MEDIUMINT BIGINT

Estos tipos de datos requieren 8, 16, 24, 32, y 64 bits de espacio de almacenamiento, respectivamente. Cada uno de ellos tiene diferentes valores máximos y mínimos. Si está seguro de que sus valores no superarán un cierto número, debe elegir el tipo de datos int más pequeño para ahorrar espacio y mejorar el rendimiento. Debe consultar los documentos oficiales para obtener más información sobre las figuras.

FLOAT y DOUBLE son cálculos aproximados y no es necesario especificar una precisión. Estableciendo una precisión e insertando un valor más allá de la especificación, su valor se redondeará a la especificación. Nuevamente vea los documentos oficiales para esto.

VARCHAR

VARCHAR, como se espera es de longitud variable, pero tenga en cuenta, no especifique algo así como VARCHAR(100) cuando sólo necesita 5 caracteres, ya que si bien la longitud es variable cuando se almacena en el disco , toma la longitud que especifique cuando trabaja con RAM, por lo que perderá memoria preciosa.

BLOB y TEXT

BLOB y TEXT se almacenan de forma especialmente, en función del motor de almacenamiento que utilice. Por lo general, se almacenan en un área "externa". Debe evitar usar esto a menos que la cadena sea MUY de largo. Este tipo de datos no puede indexar la longitud completa y tampoco es compatible con la memoria, por lo que no es utilizada por la memoria del sistema. Cuando lo solicite, se creará una tabla temporal en el disco con el motor de almacenamiento MyISAM y esto causaría una gran degradación del rendimiento.

ENUM

Esto es muy compacto y que establece los valores específicos de un campo cuando se crea una tabla. Las cadenas son fijas y cambiar una columna ENUM requiere un ALTER TABLE, por lo que no tendrá que preocuparse por la longitud de la corrección/variable para esta.

EDIT:

he encontrado una página en los documentos oficiales que responde a todas sus preguntas Data Type Storage Requirements

+0

No está claro dónde estoy equivocado. He leído documentos oficiales para entender de qué estás hablando (lo mismo que en un documento oficial) pero no son las respuestas directas para mis preguntas. En caso de que me esté malinterpretando, ** fixed-lenth ** se refiere a ** static ** y ** variable-length ** se refiere a ** dynamic **. ¡Gracias de todos modos! –

+0

Si te refieres en términos de espacio de almacenamiento fijo, entonces sí, eres * la mayoría * correcto. 'FLOAT' almacena valores de 4 bytes si tiene de 0 a 24 dígitos y 8 bytes si tiene de 25 a 53 dígitos. Además, el 'TIME DATE DATETIME TIMESTAMP' tiene una cantidad fija de espacio de almacenamiento. Y tenga en cuenta las desventajas de BLOB y TEXT. –

+0

agregó un enlace que puede ayudarlo –

Cuestiones relacionadas