2008-11-03 19 views
16

Si tengo una tabla como la siguiente:¿Cómo almacena MySQL Store Enums?

CREATE TABLE sizes (
    name ENUM('small', 'medium', 'large') 
); 

es MySQL va a almacenar esas cadenas en cada fila, o internamente tendrá que usar algo más pequeño como números enteros saber qué valor de enumeración que se refiere?

Quiero usar una enumeración en una tabla pero me preocupa si es tan inútil como almacenar una cadena en cada fila.

Respuesta

22

Los convierte en enteros en INSERT/UPDATE y vuelve a las cadenas en SELECT para que el almacenamiento interno sea como enteros pero no se expone a eso.

Puede recuperar el número entero como SELECT mycolumn + 0.

Ver ENUMs in MySQL 5

2

En primer lugar, yo no me preocuparía por el consumo de espacio al decidir si usar o no una enumeración. El espacio en disco es abundante y barato.

En segundo lugar, almacena las cadenas en la definición de columna y luego almacena la enumeración apropiada dentro de cada registro. De acuerdo con this el valor almacenado con cada registro es una representación numérica de la posición de valores dentro de la enumeración.

+3

No es solo espacio sino también velocidad. Recuperar una fila más pequeña es más rápido, y prefiero UNIRME a una enumeración que a una cadena. – Greg

+4

noah, a menos que sea una aplicación mediocre, de lo contrario estoy totalmente en desacuerdo con su primer párrafo – Pacerier

+1

No es grosero, pero – William

2

Como se explicó here, las enumeraciones se almacenan como valores entre 0 (ningún valor válido establecido) y 65.535 que están asociados con un índice de enumeración. El valor que se almacena en la tabla es un valor de 2 bytes, no una cadena.

+3

Debo agregar que si el número de enumeraciones es 255 o menos, solo se usa ** 1 byte ** (similar a TINYINT). (ref: documentos de mysql5) – Sina