不正确的字符串值:第 1 行的 'DisplayName' 列的“\xD8\xA7\xD9\x84\xD8\xB9...”
Incorrect string value: '\xD8\xA7\xD9\x84\xD8\xB9...' for column 'DisplayName' at row 1
我在 运行 服务器端代码时遇到以下异常。
FATAL 2018-04-25 14:41:59,757 [1 ] Abp.AbpBootstrapper
- Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. --->
MySql.Data.MySqlClient.MySqlException: Incorrect string value:
'\xD8\xA7\xD9\x84\xD8\xB9...' for column 'DisplayName' at row 1 --->
MySql.Data.MySqlClient.MySqlException: Incorrect string value:
'\xD8\xA7\xD9\x84\xD8\xB9...' for column 'DisplayName' at row 1 at
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
task) at
System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter.GetResult()
at
MySqlConMyCompanytor.Core.ResultSet.<ReadResultSetHeaderAsync>d__1.MoveNext()
in
C:\projects\mysqlconMyCompanytor\src\MySqlConMyCompanytor\Core\ResultSet.cs:line
43 --- End of inner exception stack trace --- at
MySql.Data.MySqlClient.MySqlDataReader.ActivateResultSet(ResultSet
resultSet) in
C:\projects\mysqlconMyCompanytor\src\MySqlConMyCompanytor\MySql.Data.MySqlClient\MySqlDataReader.cs:line
92 at
MySql.Data.MySqlClient.MySqlDataReader.<ReadFirstResultSetAsync>d__65.MoveNext()
in
C:\projects\mysqlconMyCompanytor\src\MySqlConMyCompanytor\MySql.Data.MySqlClient\MySqlDataReader.cs:line
297
--- End of stack trace from previous location where exception was thrown --- at
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
task) at
MySql.Data.MySqlClient.MySqlDataReader.<CreateAsync>d__64.MoveNext()
in
C:\projects\mysqlconMyCompanytor\src\MySqlConMyCompanytor\MySql.Data.MySqlClient\MySqlDataReader.cs:line
287
--- End of stack trace from previous location where exception was thrown --- at
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
task) at
MySqlConMyCompanytor.Core.TextCommandExecutor.<ExecuteReaderAsync>d__3.MoveNext()
in
C:\projects\mysqlconMyCompanytor\src\MySqlConMyCompanytor\Core\TextCommandExecutor.cs:line
70
--- End of stack trace from previous location where exception was thrown --- at
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
task) at
MySql.Data.MySqlClient.MySqlCommand.ExecuteDbDataReader(CommandBehavior
behavior) in
C:\projects\mysqlconMyCompanytor\src\MySqlConMyCompanytor\MySql.Data.MySqlClient\MySqlCommand.cs:line
172 at
Microsoft.EntityFrameworkCore.Storage.Internal.MySqlRelationalCommand.<ExecuteAsync>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown --- at
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
task) at
Microsoft.EntityFrameworkCore.Storage.Internal.MySqlRelationalCommand.Execute(IRelationalConMyCompanytion
conMyCompanytion, DbCommandMethod executeMethod, IReadOnlyDictionary`2
parameterValues) at
Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConMyCompanytion
conMyCompanytion, IReadOnlyDictionary`2 parameterValues) at
Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConMyCompanytion
conMyCompanytion) --- End of inner exception stack trace --- at
Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConMyCompanytion
conMyCompanytion) at
Microsoft.EntityFrameworkCore.Update.Internal.MySqlBatchExecutor.Execute(IEnumerable`1
commandBatches, IRelationalConMyCompanytion conMyCompanytion) at
Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChanges(IReadOnlyList`1
entries) at
Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IReadOnlyList`1
entriesToSave) at
Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(Boolean
acceptAllChangesOnSuccess) at
Microsoft.EntityFrameworkCore.DbContext.SaveChanges(Boolean
acceptAllChangesOnSuccess) at
Abp.EntityFrameworkCore.AbpDbContext.SaveChanges() in
D:\Github\aspnetboilerplate\src\Abp.EntityFrameworkCore\EntityFrameworkCore\AbpDbContext.cs:line
198 at
Abp.Zero.EntityFrameworkCore.AbpZeroCommonDbContext`3.SaveChanges() in
D:\Github\aspnetboilerplate\src\Abp.ZeroCore.EntityFrameworkCore\Zero\EntityFrameworkCore\AbpZeroCommonDbContext.cs:line
154 at
MyCompany.MyProject.EntityFrameworkCore.Seed.Host.DefaultLanguagesCreator.AddLanguageIfNotExists(ApplicationLanguage
language) in
C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\Host\DefaultLanguagesCreator.cs:line
59 at
MyCompany.MyProject.EntityFrameworkCore.Seed.Host.DefaultLanguagesCreator.CreateLanguages()
in
C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\Host\DefaultLanguagesCreator.cs:line
47 at
MyCompany.MyProject.EntityFrameworkCore.Seed.Host.DefaultLanguagesCreator.Create()
in
C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\Host\DefaultLanguagesCreator.cs:line
40 at
MyCompany.MyProject.EntityFrameworkCore.Seed.Host.InitialHostDbBuilder.Create()
in
C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\Host\InitialHostDbBuilder.cs:line
15 at
MyCompany.MyProject.EntityFrameworkCore.Seed.SeedHelper.SeedHostDb(MyProjectDbContext
context) in
C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\SeedHelper.cs:line
25 at
MyCompany.MyProject.EntityFrameworkCore.Seed.SeedHelper.WithDbContext[TDbContext](IIocResolver
iocResolver, Action`1 contextAction) in
C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\SeedHelper.cs:line
41 at
MyCompany.MyProject.EntityFrameworkCore.Seed.SeedHelper.SeedHostDb(IIocResolver
iocResolver) in
C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\SeedHelper.cs:line
17 at
MyCompany.MyProject.EntityFrameworkCore.MyProjectEntityFrameworkModule.PostInitialize()
in
C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\MyProjectEntityFrameworkModule.cs:line
46 at System.Collections.Generic.List`1.ForEach(Action`1 action)
at Abp.AbpBootstrapper.Initialize() in
D:\Github\aspnetboilerplate\src\Abp\AbpBootstrapper.cs:line 155
异常在文件 DefaultLanguagesCreator.cs:
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Abp.Localization;
namespace MyCompany.MyProject.EntityFrameworkCore.Seed.Host
{
public class DefaultLanguagesCreator
{
public static List<ApplicationLanguage> InitialLanguages => GetInitialLanguages();
private readonly SparDbContext _context;
private static List<ApplicationLanguage> GetInitialLanguages()
{
return new List<ApplicationLanguage>
{
new ApplicationLanguage(null, "en", "English", "famfamfam-flags gb"),
new ApplicationLanguage(null, "ar", "???????", "famfamfam-flags sa"),
new ApplicationLanguage(null, "de", "German", "famfamfam-flags de"),
new ApplicationLanguage(null, "it", "Italiano", "famfamfam-flags it"),
new ApplicationLanguage(null, "fr", "Français", "famfamfam-flags fr"),
new ApplicationLanguage(null, "pt-BR", "Portuguese", "famfamfam-flags br"),
new ApplicationLanguage(null, "tr", "Türkçe", "famfamfam-flags tr"),
new ApplicationLanguage(null, "ru", "???????", "famfamfam-flags ru"),
new ApplicationLanguage(null, "zh-CN", "????", "famfamfam-flags cn"),
new ApplicationLanguage(null, "es-MX", "Español México", "famfamfam-flags mx"),
new ApplicationLanguage(null, "nl", "Nederlands", "famfamfam-flags nl"),
new ApplicationLanguage(null, "ja", "???", "famfamfam-flags jp")
};
}
public DefaultLanguagesCreator(SparDbContext context)
{
_context = context;
}
public void Create()
{
CreateLanguages();
}
private void CreateLanguages()
{
foreach (var language in InitialLanguages)
{
AddLanguageIfNotExists(language);
}
}
private void AddLanguageIfNotExists(ApplicationLanguage language)
{
if (_context.Languages.IgnoreQueryFilters().Any(l => l.TenantId == language.TenantId && l.Name == language.Name))
{
return;
}
_context.Languages.Add(language);
_context.SaveChanges();
}
}
}
阿拉伯语例外。
您的 SQL 中有错误,尤其是您尝试分配的 varchar。可能原因:
- 您在应用程序中使用的编码可能与您的字段所期望的编码不同
- 您可能正在尝试插入一个比您的字段允许的最大长度更长的 varchar
您正在使用带有 mysql 的 aspnetboilerplate,以避免这些错误:在迁移之前,尝试更改 MySQL 数据库 table 编码。所有 table 都应该是 UTF-8 (utf8_unicode_ci)。
注意:如果出现 "Specified key was too long; max key length is 1000 bytes" 错误 运行 迁移尝试将 my.ini
中的默认存储引擎更改为 InnoDB
感谢@Dalton 和@Lajos 的建议,这确实有助于解决问题。
根据您的建议,我找到了解决方案。这不是 EF Core 问题,它是我 MySql 中配置的默认排序规则。因此,您必须更改数据库的默认排序规则。我在数据库中有 latin1 - default collation",这对于插入 Unicode 和非英语单词没有用,请 运行 下面的查询来更改排序规则数据库的所有表。
SELECT CONCAT("ALTER TABLE `", TABLE_NAME,"` convert to character set utf8 collate utf8_unicode_ci;") AS mySQL
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA="<YouDatabaseName>"
AND TABLE_TYPE="BASE TABLE"
如果你不想在MySQL中运行这个查询,那么你可以在代码迁移中添加上面的脚本。
将您的数据库和所有表分类为“utf8_unicode_ci”
您可以手动执行此操作或执行此查询:
数据库:
ALTER DATABASE <database-name> CHARACTER SET utf8 COLLATE utf8_unicode_ci;
表格:
ALTER TABLE <table-name> CHARACTER SET utf8 COLLATE utf8_unicode_ci;
这里 link 包含更多详细信息和分步指南
我在 运行 服务器端代码时遇到以下异常。
FATAL 2018-04-25 14:41:59,757 [1 ] Abp.AbpBootstrapper - Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. ---> MySql.Data.MySqlClient.MySqlException: Incorrect string value: '\xD8\xA7\xD9\x84\xD8\xB9...' for column 'DisplayName' at row 1 ---> MySql.Data.MySqlClient.MySqlException: Incorrect string value: '\xD8\xA7\xD9\x84\xD8\xB9...' for column 'DisplayName' at row 1 at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter.GetResult() at MySqlConMyCompanytor.Core.ResultSet.<ReadResultSetHeaderAsync>d__1.MoveNext() in C:\projects\mysqlconMyCompanytor\src\MySqlConMyCompanytor\Core\ResultSet.cs:line 43 --- End of inner exception stack trace --- at MySql.Data.MySqlClient.MySqlDataReader.ActivateResultSet(ResultSet resultSet) in C:\projects\mysqlconMyCompanytor\src\MySqlConMyCompanytor\MySql.Data.MySqlClient\MySqlDataReader.cs:line 92 at MySql.Data.MySqlClient.MySqlDataReader.<ReadFirstResultSetAsync>d__65.MoveNext() in C:\projects\mysqlconMyCompanytor\src\MySqlConMyCompanytor\MySql.Data.MySqlClient\MySqlDataReader.cs:line 297 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at MySql.Data.MySqlClient.MySqlDataReader.<CreateAsync>d__64.MoveNext() in C:\projects\mysqlconMyCompanytor\src\MySqlConMyCompanytor\MySql.Data.MySqlClient\MySqlDataReader.cs:line 287 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at MySqlConMyCompanytor.Core.TextCommandExecutor.<ExecuteReaderAsync>d__3.MoveNext() in C:\projects\mysqlconMyCompanytor\src\MySqlConMyCompanytor\Core\TextCommandExecutor.cs:line 70 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at MySql.Data.MySqlClient.MySqlCommand.ExecuteDbDataReader(CommandBehavior behavior) in C:\projects\mysqlconMyCompanytor\src\MySqlConMyCompanytor\MySql.Data.MySqlClient\MySqlCommand.cs:line 172 at Microsoft.EntityFrameworkCore.Storage.Internal.MySqlRelationalCommand.<ExecuteAsync>d__3.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.EntityFrameworkCore.Storage.Internal.MySqlRelationalCommand.Execute(IRelationalConMyCompanytion conMyCompanytion, DbCommandMethod executeMethod, IReadOnlyDictionary`2 parameterValues) at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConMyCompanytion conMyCompanytion, IReadOnlyDictionary`2 parameterValues) at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConMyCompanytion conMyCompanytion) --- End of inner exception stack trace --- at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConMyCompanytion conMyCompanytion) at Microsoft.EntityFrameworkCore.Update.Internal.MySqlBatchExecutor.Execute(IEnumerable`1 commandBatches, IRelationalConMyCompanytion conMyCompanytion) at Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChanges(IReadOnlyList`1 entries) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IReadOnlyList`1 entriesToSave) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(Boolean acceptAllChangesOnSuccess) at Microsoft.EntityFrameworkCore.DbContext.SaveChanges(Boolean acceptAllChangesOnSuccess) at Abp.EntityFrameworkCore.AbpDbContext.SaveChanges() in D:\Github\aspnetboilerplate\src\Abp.EntityFrameworkCore\EntityFrameworkCore\AbpDbContext.cs:line 198 at Abp.Zero.EntityFrameworkCore.AbpZeroCommonDbContext`3.SaveChanges() in D:\Github\aspnetboilerplate\src\Abp.ZeroCore.EntityFrameworkCore\Zero\EntityFrameworkCore\AbpZeroCommonDbContext.cs:line 154 at MyCompany.MyProject.EntityFrameworkCore.Seed.Host.DefaultLanguagesCreator.AddLanguageIfNotExists(ApplicationLanguage language) in C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\Host\DefaultLanguagesCreator.cs:line 59 at MyCompany.MyProject.EntityFrameworkCore.Seed.Host.DefaultLanguagesCreator.CreateLanguages() in C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\Host\DefaultLanguagesCreator.cs:line 47 at MyCompany.MyProject.EntityFrameworkCore.Seed.Host.DefaultLanguagesCreator.Create() in C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\Host\DefaultLanguagesCreator.cs:line 40 at MyCompany.MyProject.EntityFrameworkCore.Seed.Host.InitialHostDbBuilder.Create() in C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\Host\InitialHostDbBuilder.cs:line 15 at MyCompany.MyProject.EntityFrameworkCore.Seed.SeedHelper.SeedHostDb(MyProjectDbContext context) in C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\SeedHelper.cs:line 25 at MyCompany.MyProject.EntityFrameworkCore.Seed.SeedHelper.WithDbContext[TDbContext](IIocResolver iocResolver, Action`1 contextAction) in C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\SeedHelper.cs:line 41 at MyCompany.MyProject.EntityFrameworkCore.Seed.SeedHelper.SeedHostDb(IIocResolver iocResolver) in C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\Seed\SeedHelper.cs:line 17 at MyCompany.MyProject.EntityFrameworkCore.MyProjectEntityFrameworkModule.PostInitialize() in C:\Users\MyName\Source\Workspaces\Workspace\FoodKioskSolution\MyCompany.MyProject\src\MyCompany.MyProject.EntityFrameworkCore\EntityFrameworkCore\MyProjectEntityFrameworkModule.cs:line 46 at System.Collections.Generic.List`1.ForEach(Action`1 action) at Abp.AbpBootstrapper.Initialize() in D:\Github\aspnetboilerplate\src\Abp\AbpBootstrapper.cs:line 155
异常在文件 DefaultLanguagesCreator.cs:
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Abp.Localization;
namespace MyCompany.MyProject.EntityFrameworkCore.Seed.Host
{
public class DefaultLanguagesCreator
{
public static List<ApplicationLanguage> InitialLanguages => GetInitialLanguages();
private readonly SparDbContext _context;
private static List<ApplicationLanguage> GetInitialLanguages()
{
return new List<ApplicationLanguage>
{
new ApplicationLanguage(null, "en", "English", "famfamfam-flags gb"),
new ApplicationLanguage(null, "ar", "???????", "famfamfam-flags sa"),
new ApplicationLanguage(null, "de", "German", "famfamfam-flags de"),
new ApplicationLanguage(null, "it", "Italiano", "famfamfam-flags it"),
new ApplicationLanguage(null, "fr", "Français", "famfamfam-flags fr"),
new ApplicationLanguage(null, "pt-BR", "Portuguese", "famfamfam-flags br"),
new ApplicationLanguage(null, "tr", "Türkçe", "famfamfam-flags tr"),
new ApplicationLanguage(null, "ru", "???????", "famfamfam-flags ru"),
new ApplicationLanguage(null, "zh-CN", "????", "famfamfam-flags cn"),
new ApplicationLanguage(null, "es-MX", "Español México", "famfamfam-flags mx"),
new ApplicationLanguage(null, "nl", "Nederlands", "famfamfam-flags nl"),
new ApplicationLanguage(null, "ja", "???", "famfamfam-flags jp")
};
}
public DefaultLanguagesCreator(SparDbContext context)
{
_context = context;
}
public void Create()
{
CreateLanguages();
}
private void CreateLanguages()
{
foreach (var language in InitialLanguages)
{
AddLanguageIfNotExists(language);
}
}
private void AddLanguageIfNotExists(ApplicationLanguage language)
{
if (_context.Languages.IgnoreQueryFilters().Any(l => l.TenantId == language.TenantId && l.Name == language.Name))
{
return;
}
_context.Languages.Add(language);
_context.SaveChanges();
}
}
}
阿拉伯语例外。
您的 SQL 中有错误,尤其是您尝试分配的 varchar。可能原因:
- 您在应用程序中使用的编码可能与您的字段所期望的编码不同
- 您可能正在尝试插入一个比您的字段允许的最大长度更长的 varchar
您正在使用带有 mysql 的 aspnetboilerplate,以避免这些错误:在迁移之前,尝试更改 MySQL 数据库 table 编码。所有 table 都应该是 UTF-8 (utf8_unicode_ci)。
注意:如果出现 "Specified key was too long; max key length is 1000 bytes" 错误 运行 迁移尝试将 my.ini
中的默认存储引擎更改为 InnoDB感谢@Dalton 和@Lajos 的建议,这确实有助于解决问题。
根据您的建议,我找到了解决方案。这不是 EF Core 问题,它是我 MySql 中配置的默认排序规则。因此,您必须更改数据库的默认排序规则。我在数据库中有 latin1 - default collation",这对于插入 Unicode 和非英语单词没有用,请 运行 下面的查询来更改排序规则数据库的所有表。
SELECT CONCAT("ALTER TABLE `", TABLE_NAME,"` convert to character set utf8 collate utf8_unicode_ci;") AS mySQL
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA="<YouDatabaseName>"
AND TABLE_TYPE="BASE TABLE"
如果你不想在MySQL中运行这个查询,那么你可以在代码迁移中添加上面的脚本。
将您的数据库和所有表分类为“utf8_unicode_ci” 您可以手动执行此操作或执行此查询:
数据库:
ALTER DATABASE <database-name> CHARACTER SET utf8 COLLATE utf8_unicode_ci;
表格:
ALTER TABLE <table-name> CHARACTER SET utf8 COLLATE utf8_unicode_ci;
这里 link 包含更多详细信息和分步指南