The maximum row length, except for variable-length columns (VARBINARY,
VARCHAR, BLOB and TEXT), is slightly less than half of a database
page. That is, the maximum row length is about 8000 bytes. LONGBLOB
and LONGTEXT columns must be less than 4GB, and the total row length,
including BLOB and TEXT columns, must be less than 4GB.
If a row is less than half a page long, all of it is stored locally
within the page. If it exceeds half a page, variable-length columns
are chosen for external off-page storage until the row fits within
half a page, as described in Section 14.3.12.2, “File Space Management”.
Although InnoDB supports row sizes larger than 65,535 bytes
internally, MySQL itself imposes a row-size limit of 65,535 for the
combined size of all columns:
mysql> CREATE TABLE t (a VARCHAR(8000), b VARCHAR(10000),
-> c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000),
-> f VARCHAR(10000), g VARCHAR(10000)) ENGINE=InnoDB; ERROR 1118 (42000):
Row size too large. The maximum row size for the used table
type, not counting BLOBs, is 65535. You have to change some columns to
TEXT or BLOBs
See Section E.10.4, “Limits on Table Column Count and Row Size”.
You are going to have to recreate the mysqldump so that the Storage Engine is Specified. Perhaps just drop the --compatible=mssql
from the mysqldump command. The end result is the that the table will remain a MyISAM table when being imported into MariaDB.
This is just a guess but look at the error message you posted. If a BLOB prefix is 768 bytes and you have 10 BLOBs, that 7680 bytes. That leaves you with 320 bytes. If the remaining datatypes exceed 320 bytes, then it is impossible to convert to InnoDB.
Best Answer
The 61 is probably arbitrary. If you have a 61-way JOIN, you have an awful schema.
The row size limit is not quite right. What page is that on? It is ignoring that MEDIUM/LONGTEXT/BLOB fields are not included in that limit. (But, for that matter, I don't know where 64K-1 applies.) In InnoDB, there is an "about 8K" limit excluding TEXT, etc that can be pushed to off-block storage.
The InnoDB limit was raised to 1017 recently. The 4096 limit smells like a 12-bit fields in the Handler (Engine-agnostic) code.
I like limits, too. Here are some more.