表结构迁移到mysql报错Row size too large
前言
MySQL 对行长默认有一个限制,不能超过 65535。这个在异构数据源的表结构迁移的过程中比较容易遇到这种报错。
原理
官方文档参考:8.4.7 Limits on Table Column Count and Row Size
这里面有几个关键知识点:
- mysql 表行长限制一般是 65536,超过会直接报错 row size too large
- blob 和 text 只会占用 9~12 字节,因为他们数据是单独存储的
- innodb 也有表行长限制,不过和上面的概念没关系,innodb 表行长和是否使用 innodb off page 有关
解决方案
一般这种异构表结构迁移到 mysql,针对 varchar 和 binary 等变长字段升级成 blob 和 text 即可。内容不用担心会阶段,varchar 能表示的长度是小于等于 text 的(65535)