FreeSql
FreeSql copied to clipboard
实体映射表时,对于低版本mysql5.6以下,索引长度限制问题没有解决办法
如实体: [Table(Name = "song")] [Index("idx_0", nameof(Title), true)] public class Song { [Column(StringLength = 500)] public string Title { get; set; } }
数据库 mysql 连接指定为 gbk、utf8、或者utf8mb4 数据库 已开启 innodb_large_prefix 然后使用 CodeFirst.SyncStructure 方法同步表结构时就是会报出 索引超限。
大概原因:生成表时未能添加 row_format=dynamic 属性标识。
建议:后面版本是否可以在 Table 特性上增加更丰富属性,以满足不同场景需要?
row_format=dynamic 属性标识。 这种特定数据库功能,可以考虑替换一下。
关闭自动迁移功能,使用 CodeFirst 方法手工建表。
var sql = fsql.CodeFirst.GetComparisonDDLStatements(typeof(实体类));
sql = sql.Replace(..., "row_format")
fsql.Ado.ExecuteNonQuery(sql);
我也遇到这个问题了, 不同版本直接迁移数据库时候
统一处理?
fsql.Aop.CommandBefore += (_, e) =>
{
e.Command.CommandText = e.Command.CommandText.Replace("xxx", "xxx row_format=dynamic");
};