表结构迁移到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)