FreeSql icon indicating copy to clipboard operation
FreeSql copied to clipboard

实体映射表时,对于低版本mysql5.6以下,索引长度限制问题没有解决办法

Open zhza opened this issue 2 years ago • 1 comments

如实体: [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 特性上增加更丰富属性,以满足不同场景需要?

zhza avatar Jun 15 '22 08:06 zhza

row_format=dynamic 属性标识。 这种特定数据库功能,可以考虑替换一下。

关闭自动迁移功能,使用 CodeFirst 方法手工建表。

var sql = fsql.CodeFirst.GetComparisonDDLStatements(typeof(实体类));
sql = sql.Replace(..., "row_format")

fsql.Ado.ExecuteNonQuery(sql);

2881099 avatar Jun 15 '22 13:06 2881099

我也遇到这个问题了, 不同版本直接迁移数据库时候

densen2014 avatar Jun 02 '23 17:06 densen2014

统一处理?

fsql.Aop.CommandBefore += (_, e) =>
{
    e.Command.CommandText = e.Command.CommandText.Replace("xxx", "xxx row_format=dynamic");
};

2881099 avatar Jun 06 '23 07:06 2881099