C# 实体框架核心的MySQL排序问题
我的asp.net核心web应用程序是MySQL数据库。我生成迁移和更新数据库,然后我看到表的排序规则在不同的机器上是不同的。在我的机器上,它是latin1-默认排序规则,在另一台机器上,它是utf8-默认排序规则 因此,由于这种行为,我在插入日语或其他语言时遇到了一个异常,例如日本語, 西班牙人墨西哥人简体中文 放入具有varchar(64)列的表中。它可以在另一台机器上正常工作,该机器在此表上具有默认排序规则utf8 EF核心版本:2.0.1 MySql:5.7.22**C# 实体框架核心的MySQL排序问题,c#,mysql,asp.net-core,entity-framework-core,C#,Mysql,Asp.net Core,Entity Framework Core,我的asp.net核心web应用程序是MySQL数据库。我生成迁移和更新数据库,然后我看到表的排序规则在不同的机器上是不同的。在我的机器上,它是latin1-默认排序规则,在另一台机器上,它是utf8-默认排序规则 因此,由于这种行为,我在插入日语或其他语言时遇到了一个异常,例如日本語, 西班牙人墨西哥人简体中文 放入具有varchar(64)列的表中。它可以在另一台机器上正常工作,该机器在此表上具有默认排序规则utf8 EF核心版本:2.0.1 MySql:5.7.22** 这是EF的核心问题
这是EF的核心问题吗?或者是否有任何解决方法来生成具有正确排序规则或编码的数据库?这不是EF核心问题,如果您在MySql中配置了默认排序规则,则MySql将选择该排序规则。所以排序规则是数据库系统配置的事情。可能您必须更改计算机上的默认排序规则 另一个选项是在迁移中创建table语句后添加:
Sql('alter table <some_table> convert to character set utf8 collate utf8_unicode_ci');
Sql('alter table convert to character set utf8 collate utf8\u unicode\u ci');
这不是EF核心问题,如果您在MySql中配置了默认排序规则,那么将由MySql选择。所以排序规则是数据库系统配置的事情。可能您必须更改计算机上的默认排序规则
另一个选项是在迁移中创建table语句后添加:
Sql('alter table <some_table> convert to character set utf8 collate utf8_unicode_ci');
Sql('alter table convert to character set utf8 collate utf8\u unicode\u ci');
手动将每列配置为特定的字符集和排序规则,
如果无法更改服务器/架构默认字符集或排序规则(您不是服务器管理员)
我的实体框架项目库与MySQL5.7.21
...
运行时间;建设;本地人;内容文件;分析仪;可传递的
全部的
注意,以下内容可以设置字符集
,但排序规则
固定为utf8mb4\u常规\u ci
services.AddPooledDbContextFactory<ApplicationDbContext>(
options => options
.UseMySql(
Configuration["ConnectionString"],
new MySqlServerVersion(new Version(5, 7, 21)),
mySqlOptions =>
{
mySqlOptions
.CharSetBehavior(CharSetBehavior.AppendToAllColumns);
mySqlOptions.CharSet(CharSet.Utf8Mb4);
})
.EnableSensitiveDataLogging()
.EnableDetailedErrors()
);
services.AddPooledDbContextFactory(
选项=>选项
.UseMySql(
配置[“连接字符串”],
新MySqlServerVersion(新版本(5,7,21)),
mySqlOptions=>
{
mySqlOptions
.CharSetBehavior(CharSetBehavior.AppendToAllColumns);
字符集(CharSet.Utf8Mb4);
})
.EnableSensitiveDataLogging()
.EnableDetailedErrors()
);
手动将每列配置为特定的字符集和排序规则,
如果无法更改服务器/架构默认字符集或排序规则(您不是服务器管理员)
我的实体框架项目库与MySQL5.7.21
...
运行时间;建设;本地人;内容文件;分析仪;可传递的
全部的
注意,以下内容可以设置字符集
,但排序规则
固定为utf8mb4\u常规\u ci
services.AddPooledDbContextFactory<ApplicationDbContext>(
options => options
.UseMySql(
Configuration["ConnectionString"],
new MySqlServerVersion(new Version(5, 7, 21)),
mySqlOptions =>
{
mySqlOptions
.CharSetBehavior(CharSetBehavior.AppendToAllColumns);
mySqlOptions.CharSet(CharSet.Utf8Mb4);
})
.EnableSensitiveDataLogging()
.EnableDetailedErrors()
);
services.AddPooledDbContextFactory(
选项=>选项
.UseMySql(
配置[“连接字符串”],
新MySqlServerVersion(新版本(5,7,21)),
mySqlOptions=>
{
mySqlOptions
.CharSetBehavior(CharSetBehavior.AppendToAllColumns);
字符集(CharSet.Utf8Mb4);
})
.EnableSensitiveDataLogging()
.EnableDetailedErrors()
);
您能告诉我SQL Server的查询吗?您能告诉我SQL Server的查询吗?
services.AddPooledDbContextFactory<ApplicationDbContext>(
options => options
.UseMySql(
Configuration["ConnectionString"],
new MySqlServerVersion(new Version(5, 7, 21)),
mySqlOptions =>
{
mySqlOptions
.CharSetBehavior(CharSetBehavior.AppendToAllColumns);
mySqlOptions.CharSet(CharSet.Utf8Mb4);
})
.EnableSensitiveDataLogging()
.EnableDetailedErrors()
);