viv*_*una 3 c# mysql collation asp.net-boilerplate aspnetboilerplate
运行服务器端代码时出现以下异常。
\n\n\n\n\nRun Code Online (Sandbox Code Playgroud)\nFATAL 2018-04-25 14:41:59,757 [1 ] Abp.AbpBootstrapper \n- Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. --->\nMySql.Data.MySqlClient.MySqlException: Incorrect string value:\n\'\\xD8\\xA7\\xD9\\x84\\xD8\\xB9...\' for column \'DisplayName\' at row 1 --->\nMySql.Data.MySqlClient.MySqlException: Incorrect string value:\n\'\\xD8\\xA7\\xD9\\x84\\xD8\\xB9...\' for column \'DisplayName\' at row 1 at\nSystem.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at\nSystem.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task\ntask) at\nSystem.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter.GetResult()\nat\nMySqlConMyCompanytor.Core.ResultSet.<ReadResultSetHeaderAsync>d__1.MoveNext()\nin\nC:\\projects\\mysqlconMyCompanytor\\src\\MySqlConMyCompanytor\\Core\\ResultSet.cs:line\n43 --- End of inner exception stack trace --- at\nMySql.Data.MySqlClient.MySqlDataReader.ActivateResultSet(ResultSet\nresultSet) in\nC:\\projects\\mysqlconMyCompanytor\\src\\MySqlConMyCompanytor\\MySql.Data.MySqlClient\\MySqlDataReader.cs:line\n92 at\nMySql.Data.MySqlClient.MySqlDataReader.<ReadFirstResultSetAsync>d__65.MoveNext()\nin\nC:\\projects\\mysqlconMyCompanytor\\src\\MySqlConMyCompanytor\\MySql.Data.MySqlClient\\MySqlDataReader.cs:line\n297\n--- End of stack trace from previous location where exception was thrown --- at\nSystem.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at\nSystem.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task\ntask) at\nMySql.Data.MySqlClient.MySqlDataReader.<CreateAsync>d__64.MoveNext()\nin\nC:\\projects\\mysqlconMyCompanytor\\src\\MySqlConMyCompanytor\\MySql.Data.MySqlClient\\MySqlDataReader.cs:line\n287\n--- End of stack trace from previous location where exception was thrown --- at\nSystem.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at\nSystem.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task\ntask) at\nMySqlConMyCompanytor.Core.TextCommandExecutor.<ExecuteReaderAsync>d__3.MoveNext()\nin\nC:\\projects\\mysqlconMyCompanytor\\src\\MySqlConMyCompanytor\\Core\\TextCommandExecutor.cs:line\n70\n--- End of stack trace from previous location where exception was thrown --- at\nSystem.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at\nSystem.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task\ntask) at\nMySql.Data.MySqlClient.MySqlCommand.ExecuteDbDataReader(CommandBehavior\nbehavior) in\nC:\\projects\\mysqlconMyCompanytor\\src\\MySqlConMyCompanytor\\MySql.Data.MySqlClient\\MySqlCommand.cs:line\n172 at\nMicrosoft.EntityFrameworkCore.Storage.Internal.MySqlRelationalCommand.<ExecuteAsync>d__3.MoveNext()\n--- End of stack trace from previous location where exception was thrown --- at\nSystem.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at\nSystem.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task\ntask) at\nMicrosoft.EntityFrameworkCore.Storage.Internal.MySqlRelationalCommand.Execute(IRelationalConMyCompanytion\nconMyCompanytion, DbCommandMethod executeMethod, IReadOnlyDictionary`2\nparameterValues) at\nMicrosoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConMyCompanytion\nconMyCompanytion, IReadOnlyDictionary`2 parameterValues) at\nMicrosoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConMyCompanytion\nconMyCompanytion) --- End of inner exception stack trace --- at\nMicrosoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConMyCompanytion\nconMyCompanytion) at\nMicrosoft.EntityFrameworkCore.Update.Internal.MySqlBatchExecutor.Execute(IEnumerable`1\ncommandBatches, IRelationalConMyCompanytion conMyCompanytion) at\nMicrosoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChanges(IReadOnlyList`1\nentries) at\nMicrosoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IReadOnlyList`1\nentriesToSave) at\nMicrosoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(Boolean\nacceptAllChangesOnSuccess) at\nMicrosoft.EntityFrameworkCore.DbContext.SaveChanges(Boolean\nacceptAllChangesOnSuccess) at\nAbp.EntityFrameworkCore.AbpDbContext.SaveChanges() in\nD:\\Github\\aspnetboilerplate\\src\\Abp.EntityFrameworkCore\\EntityFrameworkCore\\AbpDbContext.cs:line\n198 at\nAbp.Zero.EntityFrameworkCore.AbpZeroCommonDbContext`3.SaveChanges() in\nD:\\Github\\aspnetboilerplate\\src\\Abp.ZeroCore.EntityFrameworkCore\\Zero\\EntityFrameworkCore\\AbpZeroCommonDbContext.cs:line\n154 at\nMyCompany.MyProject.EntityFrameworkCore.Seed.Host.DefaultLanguagesCreator.AddLanguageIfNotExists(ApplicationLanguage\nlanguage) in\nC:\\Users\\MyName\\Source\\Workspaces\\Workspace\\FoodKioskSolution\\MyCompany.MyProject\\src\\MyCompany.MyProject.EntityFrameworkCore\\EntityFrameworkCore\\Seed\\Host\\DefaultLanguagesCreator.cs:line\n59 at\nMyCompany.MyProject.EntityFrameworkCore.Seed.Host.DefaultLanguagesCreator.CreateLanguages()\nin\nC:\\Users\\MyName\\Source\\Workspaces\\Workspace\\FoodKioskSolution\\MyCompany.MyProject\\src\\MyCompany.MyProject.EntityFrameworkCore\\EntityFrameworkCore\\Seed\\Host\\DefaultLanguagesCreator.cs:line\n47 at\nMyCompany.MyProject.EntityFrameworkCore.Seed.Host.DefaultLanguagesCreator.Create()\nin\nC:\\Users\\MyName\\Source\\Workspaces\\Workspace\\FoodKioskSolution\\MyCompany.MyProject\\src\\MyCompany.MyProject.EntityFrameworkCore\\EntityFrameworkCore\\Seed\\Host\\DefaultLanguagesCreator.cs:line\n40 at\nMyCompany.MyProject.EntityFrameworkCore.Seed.Host.InitialHostDbBuilder.Create()\nin\nC:\\Users\\MyName\\Source\\Workspaces\\Workspace\\FoodKioskSolution\\MyCompany.MyProject\\src\\MyCompany.MyProject.EntityFrameworkCore\\EntityFrameworkCore\\Seed\\Host\\InitialHostDbBuilder.cs:line\n15 at\nMyCompany.MyProject.EntityFrameworkCore.Seed.SeedHelper.SeedHostDb(MyProjectDbContext\ncontext) in\nC:\\Users\\MyName\\Source\\Workspaces\\Workspace\\FoodKioskSolution\\MyCompany.MyProject\\src\\MyCompany.MyProject.EntityFrameworkCore\\EntityFrameworkCore\\Seed\\SeedHelper.cs:line\n25 at\nMyCompany.MyProject.EntityFrameworkCore.Seed.SeedHelper.WithDbContext[TDbContext](IIocResolver\niocResolver, Action`1 contextAction) in\nC:\\Users\\MyName\\Source\\Workspaces\\Workspace\\FoodKioskSolution\\MyCompany.MyProject\\src\\MyCompany.MyProject.EntityFrameworkCore\\EntityFrameworkCore\\Seed\\SeedHelper.cs:line\n41 at\nMyCompany.MyProject.EntityFrameworkCore.Seed.SeedHelper.SeedHostDb(IIocResolver\niocResolver) in\nC:\\Users\\MyName\\Source\\Workspaces\\Workspace\\FoodKioskSolution\\MyCompany.MyProject\\src\\MyCompany.MyProject.EntityFrameworkCore\\EntityFrameworkCore\\Seed\\SeedHelper.cs:line\n17 at\nMyCompany.MyProject.EntityFrameworkCore.MyProjectEntityFrameworkModule.PostInitialize()\nin\nC:\\Users\\MyName\\Source\\Workspaces\\Workspace\\FoodKioskSolution\\MyCompany.MyProject\\src\\MyCompany.MyProject.EntityFrameworkCore\\EntityFrameworkCore\\MyProjectEntityFrameworkModule.cs:line\n46 at System.Collections.Generic.List`1.ForEach(Action`1 action) \nat Abp.AbpBootstrapper.Initialize() in\nD:\\Github\\aspnetboilerplate\\src\\Abp\\AbpBootstrapper.cs:line 155\n
异常位于文件DefaultLanguagesCreator.cs中中:
\n\nusing System.Collections.Generic;\nusing System.Linq;\nusing Microsoft.EntityFrameworkCore;\nusing Abp.Localization;\n\nnamespace MyCompany.MyProject.EntityFrameworkCore.Seed.Host\n{\n public class DefaultLanguagesCreator\n {\n public static List<ApplicationLanguage> InitialLanguages => GetInitialLanguages();\n\n private readonly SparDbContext _context;\n\n private static List<ApplicationLanguage> GetInitialLanguages()\n {\n return new List<ApplicationLanguage>\n {\n new ApplicationLanguage(null, "en", "English", "famfamfam-flags gb"),\n new ApplicationLanguage(null, "ar", "???????", "famfamfam-flags sa"),\n new ApplicationLanguage(null, "de", "German", "famfamfam-flags de"),\n new ApplicationLanguage(null, "it", "Italiano", "famfamfam-flags it"),\n new ApplicationLanguage(null, "fr", "Fran\xc3\xa7ais", "famfamfam-flags fr"),\n new ApplicationLanguage(null, "pt-BR", "Portuguese", "famfamfam-flags br"),\n new ApplicationLanguage(null, "tr", "T\xc3\xbcrk\xc3\xa7e", "famfamfam-flags tr"),\n new ApplicationLanguage(null, "ru", "???????", "famfamfam-flags ru"),\n new ApplicationLanguage(null, "zh-CN", "????", "famfamfam-flags cn"),\n new ApplicationLanguage(null, "es-MX", "Espa\xc3\xb1ol M\xc3\xa9xico", "famfamfam-flags mx"),\n new ApplicationLanguage(null, "nl", "Nederlands", "famfamfam-flags nl"),\n new ApplicationLanguage(null, "ja", "???", "famfamfam-flags jp")\n };\n }\n\n public DefaultLanguagesCreator(SparDbContext context)\n {\n _context = context;\n }\n\n public void Create()\n {\n CreateLanguages();\n }\n\n private void CreateLanguages()\n {\n foreach (var language in InitialLanguages)\n {\n AddLanguageIfNotExists(language);\n }\n }\n\n private void AddLanguageIfNotExists(ApplicationLanguage language)\n {\n if (_context.Languages.IgnoreQueryFilters().Any(l => l.TenantId == language.TenantId && l.Name == language.Name))\n {\n return;\n }\n\n _context.Languages.Add(language);\n _context.SaveChanges();\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n它对阿拉伯语给予例外。
\n感谢@Dalton 和@Lajos 的建议,它确实有助于解决问题。
在您的建议的帮助下我找到了解决方案。这不是 EF Core 问题,而是我的 MySql 中配置的默认排序规则。因此,您必须更改数据库上的默认排序规则。我的数据库中有latin1 - 默认排序规则“,这对于插入 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"
Run Code Online (Sandbox Code Playgroud)
如果您不想在 MySQL 中运行此查询,那么您可以在代码迁移中添加上述脚本。
| 归档时间: |
|
| 查看次数: |
6391 次 |
| 最近记录: |