C# 实体框架核心的MySQL排序问题

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的核心问题

我的asp.net核心web应用程序是MySQL数据库。我生成迁移和更新数据库,然后我看到表的排序规则在不同的机器上是不同的。在我的机器上,它是latin1-默认排序规则,在另一台机器上,它是utf8-默认排序规则

因此,由于这种行为,我在插入日语或其他语言时遇到了一个异常,例如日本語, 西班牙人墨西哥人简体中文 放入具有varchar(64)列的表中。它可以在另一台机器上正常工作,该机器在此表上具有默认排序规则utf8

EF核心版本:2.0.1

MySql:5.7.22**


这是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');

手动将每列配置为特定的字符集和排序规则, 如果无法更改服务器/架构默认字符集或排序规则(您不是服务器管理员)

我的实体框架项目库与MySQL
5.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()
);

手动将每列配置为特定的字符集和排序规则, 如果无法更改服务器/架构默认字符集或排序规则(您不是服务器管理员)

我的实体框架项目库与MySQL
5.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()
            );