En algunos casos, MySQL cambia especificaciones de columnas
silencioasmente de las dadas en un comando CREATE
TABLE
o ALTER TABLE
. Pueden ser
cambiso a un tipo de datos, a atributos asociados con un tipo
de datos o a una especificación de índice.
Los posibles cambios de tipos de datos se dan en la siguiente lista. Ocurren antes de MySQL 5.0.3. Desde 5.0.3, ocurre un error si no se puede crear una columna usando el tipo de datos especificado.
Columnas VARCHAR
con una longitudo
menor que cuatro se cambian a CHAR
.
Si cualquier columna en una tabla tiene una longitud
variable, el registro entero pasa a tener longitud
variable. Por lo tanto, si una tabla contiene cualquier
columna de longitud variable (VARCHAR
,
TEXT
, o BLOB
), toda
columna CHAR
con más de tres
caracteres se cambia a columna VARCHAR
. Esto no afecta cómo usa las columnas en ningún modo;
en MySQL, VARCHAR
es sólo un modo
distinto de almacenar caracteres. MySQL realiza esta
conversión porque ahorra espacio y hacer las operaciones
de tabla más rápidas. Consulte
Capítulo 14, Motores de almacenamiento de MySQL y tipos de tablas.
Antes de MySQL 5.0.3, una columna CHAR
o VARCHAR
con una longitud mayor a 255
se convierte al tipo TEXT
más pequeño
que puede contener valores de la longitud dada. Por
ejemplo, VARCHAR(500)
se convierte en
TEXT
, y
VARCHAR(200000)
se convierte en
MEDIUMTEXT
. Tenga en cuenta que esta
conversión resulta en un cambio de comportamiento del
tratamiento de espacios finales.
Conversiones similares ocurren para
BINARY
y VARBINARY
,
excepto que se convierten en tipo BLOB
.
Desde MySQL 5.0.3, una columna CHAR
o
BINARY
con una longitud mayor a 255 no
se convierte silenciosamente . En su lugar, ocurre un
error. Desde MySQL 5.0.6 , la conversión silenciosa de
columnas VARCHAR
y
VARBINARY
con una longitudo mayor a
65,535 no ocurre si el modo estricto SQL está activado.
En su lugar, ocurre un error.
Para una especificación de
DECIMAL(
,
si M
,D
)M
no es mayor que
D
, se ajusta por encima. Por
ejemplo DECIMAL(10,10)
pasa a ser
DECIMAL(11,10)
.
Otros cambios de columna incluyen cambios de atributos o especficación de índice:
Los tamaños de muestra de TIMESTAMP
se
descartan. Tenga en cuenta que columnas
TIMESTAMP
han cambiado considrablemente
en versiones recientes de MySQL anteriores a 5.0; para una
descripción, consulte Manual de referencia de MySQL 4.1.
Las columnas que son parte de PRIMARY
KEY
son NOT NULL
incluso si
no se declaran como tales.
Los espacios finales se borran automáticamente para
ENUM
y SET
cuando se
crea la tabla.
MySQL mapea ciertos tipos de columna usados por otras bases de datos SQL a tipos MySQL . Consulte Sección 11.7, “Usar tipos de columnas de otros motores de bases de datos”.
Si incluye una cláusula USING
para
especificar un tipo de índice que no sea legal para un
motor de almacenamiento dado, pero hay otro tipo de
índice disponible que puede usar el motor sin afectar el
resultado de la consulta, el motor usa el tipo disponible.
Para ver si MySQL usa un tipo de columna distinto al
especificado, realice un comando DESCRIBE
o
SHOW CREATE TABLE
tras crear o alterar la
tabla.
Otros cambios de tipo de columna pueden ocurrir si comprime una tabla usando myisampack. Consulte Sección 14.1.3.3, “Características de las tablas comprimidas”.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.