此页面详细介绍了特定于 SQL Server 提供程序的列配置选项。
Unicode 和 UTF-8
SQL Server 2019 引入了对 UTF-8 的支持,可以通过配置特殊的 UTF-8 排序规则在 char 和 varchar 列中存储 UTF-8 数据。 可以通过将列的类型配置为char或varchar,指定以_UTF8结尾的 UTF-8 排序规则,并确保列为 Unicode,从而简单地在 EF 中使用 UTF-8 列。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Name)
.HasColumnType("varchar(max)")
.UseCollation("LATIN1_GENERAL_100_CI_AS_SC_UTF8")
.IsUnicode();
}
稀疏列
稀疏列是能够对 null 值进行存储优化的普通列,这样可以减少 null 值所占的空间,但检索非 null 值时需要付出更多的开销。
例如,考虑通过“每个层次结构一张表”(TPH) 策略映射的类型层次结构。 在 TPH 中,单个数据库表用于保存层次结构中的所有类型;这意味着表必须包含整个层次结构中每个属性的列,对于属于罕见类型的列,大多数行将包含该列的 null 值。 在这些情况下,将列配置为 稀疏可能很有意义,以减少空间要求。 是否让一列稀疏的决定必须由用户做出,这取决于对于表中实际数据的预期。
可以通过 Fluent API 将列设置为稀疏。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<RareBlog>()
.Property(b => b.RareProperty)
.IsSparse();
}
有关稀疏列的详细信息, 请参阅 SQL Server 文档。