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

Límite de cambio para el tamaño de fila de Mysql demasiado grande

La pregunta se ha realizado en serverfault también.

Es posible que desee echar un vistazo a este artículo lo que explica mucho sobre los tamaños de fila de MySQL. Es importante tener en cuenta que incluso si usa campos de TEXTO o BLOB, el tamaño de su fila aún podría ser superior a 8K (límite para InnoDB) porque almacena los primeros 768 bytes para cada campo en línea en la página.

La forma más sencilla de solucionar esto es usar el formato de archivo Barracuda con InnoDB. Básicamente, esto elimina el problema por completo al almacenar solo el puntero de 20 bytes a los datos de texto en lugar de almacenar los primeros 768 bytes.

El método que funcionó para el OP fue:

  1. Agregue lo siguiente a my.cnf archivo bajo [mysqld] sección.

    innodb_file_per_table=1
    innodb_file_format = Barracuda
    
  2. ALTER la tabla para usar ROW_FORMAT=COMPRESSED .

    ALTER TABLE nombre_tabla
        ENGINE=InnoDB
        ROW_FORMAT=COMPRESSED 
        KEY_BLOCK_SIZE=8;
    

Existe la posibilidad de que lo anterior aún no resuelva sus problemas. Es un error conocido (y verificado) con InnoDB motor, y una solución temporal por ahora es recurrir a MyISAM motor como almacenamiento temporal. Entonces, en su my.cnf archivo:

internal_tmp_disk_storage_engine=MyISAM