专业网站优化seo山东软件开发的公司
以下是ai工具帮助整理的EF Core 实体字段类型与 MySQL 数据库中常见字段类型的映射关系列表。这个映射基于使用的 EF Core MySQL Provider ( Pomelo.EntityFrameworkCore.MySql)
请注意:
- M在- INT(M)等类型中通常表示显示宽度,不影响存储大小或数值范围(除非配合- ZEROFILL使用),因此在映射时主要关注基本类型名称和是否有符号。
- 空安全 (Nullable) C# 类型(例如 int?,DateTime?)会映射到对应的 MySQL 类型,但数据库列会允许NULL值。非空 C# 类型(例如int,DateTime)则映射到不允许NULL值的 MySQL 列(除非显式配置为允许)。
- 以下列表涵盖了大部分常用类型,但可能不是全部。
EF Core (C#) -> MySQL 数据类型映射
| EF Core (C#) 类型 | 常用 MySQL 类型 | 备注 / 注意事项 | 
|---|---|---|
| bool | TINYINT(1)或BOOL | MySQL 没有独立的布尔类型,通常映射为 TINYINT(1)(0=false, 1=true)。BOOL是TINYINT(1)的别名。 | 
| byte | TINYINT UNSIGNED | 无符号 8 位整数,范围 0-255。 | 
| sbyte | TINYINT | 有符号 8 位整数,范围 -128 到 127。 | 
| short | SMALLINT | 有符号 16 位整数。 | 
| ushort | SMALLINT UNSIGNED | 无符号 16 位整数。 | 
| int | INT或INTEGER | 有符号 32 位整数。 | 
| uint | INT UNSIGNED或INTEGER UNSIGNED | 无符号 32 位整数。 | 
| long | BIGINT | 有符号 64 位整数。 | 
| ulong | BIGINT UNSIGNED | 无符号 64 位整数。 | 
| float | FLOAT | 单精度浮点数。 | 
| double | DOUBLE或REAL | 双精度浮点数。 | 
| decimal | DECIMAL | 精确小数类型。通常需要指定精度和标度,例如 DECIMAL(18, 2)。EF Core 默认可能会使用一个较大的默认值,但最好显式配置。 | 
| char | CHAR(1) | 单个字符。 | 
| string | VARCHAR(N)或LONGTEXT | 可变长度字符串。默认映射取决于 EF Core 的配置,通常是 VARCHAR带一个最大长度。如果未指定最大长度或长度非常大,可能映射到TEXT,MEDIUMTEXT,LONGTEXT。 | 
| DateTime | DATETIME | 存储日期和时间。默认情况下,EF Core 不会存储时区信息。请注意 MySQL DATETIME范围。 | 
| DateTimeOffset | DATETIME或TIMESTAMP | 注意: MySQL 的 DATETIME和TIMESTAMP不直接支持时区偏移量。Provider 通常会映射到DATETIME,但这可能导致时区问题。某些 Provider 或配置下可能映射到TIMESTAMP(存储 UTC 但有范围限制) 或需要额外处理。这是一种复杂的映射。 | 
| DateOnly(仅 .NET 6 及以上) | DATE | 仅存储日期部分。 | 
| TimeOnly(仅 .NET 6 及以上) | TIME | 仅存储时间部分。 | 
| TimeSpan | TIME或BIGINT | 映射到 TIME(存储时间间隔) 或BIGINT(存储Ticks)。取决于 Provider 的默认行为或你的配置。通常映射到TIME。 | 
| byte[] | VARBINARY(N)或BLOB | 可变长度二进制数据。默认映射取决于 EF Core 的配置,通常是 VARBINARY带最大长度。如果长度很大或未指定,可能映射到TINYBLOB,BLOB,MEDIUMBLOB,LONGBLOB。 | 
| Guid | BINARY(16)或VARCHAR(36) | 存储 GUID。 BINARY(16)更节省空间和索引效率更高,但存储和读取时需要注意字节序转换。VARCHAR(36)更易读,但效率较低。Pomelo provider 默认通常是CHAR(36)。可以配置为BINARY(16)。 | 
| enum | INT(或其基础类型) | EF Core 默认会将 C# 枚举映射到其基础整数类型(如 int或byte),然后该整数类型再映射到对应的 MySQL 整数类型。MySQL 的ENUM类型需要自定义 Value Converter。 | 
| JsonDocument,JsonElement或自定义对象 (需配置) | JSON | 需要使用特定的 Value Converter 或配置才能将 C# JSON 类型或对象映射到 MySQL 的 JSON类型。 | 
重要提示:
- Nullable Types: 任何 C# 值类型 (int,bool,DateTime等) 后面的?(int?,bool?,DateTime?) 表示它是可空的。在数据库中,这对应于该列允许存储NULL值。引用类型 (string,byte[]) 默认就是可空的,unless configured otherwise.
- Provider: 上述映射基于常见的 EF Core MySQL Provider (如 Pomelo.EntityFrameworkCore.MySql)。不同的 Provider 或 Provider 版本可能会有细微差别。
- Fluent API / Data Annotations: 你可以使用 EF Core 的 Fluent API 或 Data Annotations 来覆盖默认的映射行为,例如指定字符串的最大长度,DECIMAL的精度和标度,或者将Guid映射到BINARY(16)。
-------------------------传统分割线--------------------------------------------------------------
