写这篇博客的原因是:公司买了个做项目管理的系统,私有化部署对方的数据库表时,遇到了几个问题,随手记录一下。
1. 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
报错原因:
我的数据库编码为utf8mb4,数据库设定的varchar长度:(1000+10000+5000+390)*4>65535了,如果是utf8,则是设定的varchar或者其他类型长度乘以3
解决办法:
将比较长的字段类型设置成text而不是varchar
2. Specified key was too long; max key length is 767 bytes
报错原因:
Id设置成了VARCHAR(255), 则占用字节为 255 * 4 = 1020 byte,而mysql 的主键最大长度不能超过 767 byte,换算一下:主键最大可为VARCHAR(191)
3.1005 - Can't create table 'hong.qrtz_triggers' (errno: 150)
在mysql 中建立引用约束的时候会出现MySQL ERROR 1005: Can’t create table (errno: 150)的错误信息,结果是不能建立引用约束。
出现问题的大致情况
1、外键的引用类型不一样,如主键是int外键是char
2、找不到主表中引用的列
3、引用的字段和外键的字符编码不一致,也可能存储引擎不一样
4、引用的字段和外键的约束不同