sql >> Base de Datos >  >> RDS >> Mysql

MYSQL:cómo solucionar el límite de tamaño de fila de 66 KBytes

La respuesta aceptada es incorrecta (o al menos bastante obstinada):personalmente no quiero que los datos se almacenen fuera de mi base de datos, ya que crea complicaciones en términos de procedimientos de copia de seguridad y consultas transaccionales.

Como han señalado otros, el manual afirma repetidamente que las columnas BLOB y TEXT no cuentan para el tamaño total de la fila, pero desafortunadamente, con los ajustes de configuración predeterminados, eso no es cierto y termina recibiendo este mensaje de error. (El mensaje de error no tiene ningún sentido, porque le dice que use TEXTO en lugar de VARCHAR para solucionar el problema, lo cual ya está haciendo).

El motivo de esta limitación es el mecanismo de almacenamiento predeterminado, Antelope , que almacena los primeros 768 bytes de columnas de longitud variable en la fila, y una posible solución es usar INNODB y cambiar su mecanismo de almacenamiento a la alternativa Barracuda mecanismo de almacenamiento:

SET GLOBAL innodb_file_format=Barracuda;

Esto no tendrá un efecto inmediato, porque esta configuración es predeterminada para los nuevos archivos de base de datos, por lo que deberá eliminar y volver a crear toda su base de datos.

Alternativamente, cambie a Barracuda (como se indicó anteriormente) y luego (además) cambie a la estrategia de archivo por mesa:

SET GLOBAL innodb_file_per_table=ON;

Nuevamente, esto no tendrá un efecto inmediato, ya que ambas configuraciones son predeterminadas para las tablas nuevas; por lo tanto, deberá volver a colocar y volver a crear la tabla.

Si mira en la carpeta de datos de MySQL después de hacer esto, puede confirmar que se crearon archivos separados, p. para una base de datos llamada "datos" y una tabla llamada "prueba", debería ver un archivo llamado "datos/prueba/bigtable.ibd".

Si no le gusta cambiar la configuración global en MySQL, intente SET SESSION en lugar de SET GLOBAL , p.ej. inmediatamente antes de ejecutar su CREATE TABLE declaraciones.