Row size too large (> 8126)
Par Cédric Tabin le jeudi 12.03.2020, 11:00 - Autre - Lien permanent
Etant donné qu'il devient impossible d'utiliser certains prédicats sur les index spatiaux dans MySQL 8 (voir ici), nous avons décidé de migrer sur MariaDB. MariaDB étant le fork opensource de MySQL, la transition s'effectue de manière quasi transparente.
En important le schema de notre application, MariaDB sort l'erreur suivante:
ERROR 1118 (42000): Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
Cette "erreur" n'est pas propre à MariaDB et existe aussi dans MySQL. Cela vient de la structure même de certaines tables avec beaucoup de colonnes en varchar
typiquement. Bien que lorsque cette erreur survient il faudrait reconsidérer la modélisation de la base de donnée, cela n'était pas envisageable dans mon cas. Heureusement, j'ai trouvé une solution assez simple pour remédier au problème.
En partant d'une installation vierge, modifier le fichier <mariadb>/data/my.ini
avec une des valeurs possibles pour le page size:
[mysql] innodb_page_size = 32k
Il faut ensuite supprimer les fichiers <mariadb>/data/ibdata1
et <mariadb>/data/ib_logfile*
. Ces fichiers seront automatiquement recréés lorsque MariaDB redémarre:
systemctl stop mysql cd <mariadb>/data rm ibdata1 ib_logfile* systemctl start mysql
Et voila !