背景
我注意到,当通过实体框架从我的 MVC 网站保存数据时,如果我有类似希腊语“α”的内容,它会被转换为“a”。
所采取的行动
我推翻了OnModelCreating
在数据库上下文中并添加以下代码。
modelBuilder.Properties<string>().Configure(x => { x.HasColumnType("NVARCHAR"); x.IsUnicode(true); });
这最初看起来很有希望,因为新生成的迁移具有这种结构。
AlterColumn("dbo.Item", "Name", c => c.String(maxLength: 800, storeType: "nvarchar"));
运行迁移后,我看到相关列有排序规则utf8_general_ci
.
持续存在的问题
通过我的应用程序保存数据时,这没有任何改变。当从网站传递希腊字符时,它仍然降级为基本等效字符。
然而,如果我尝试直接通过 MySQL Workbench 添加这些字母,它会很好地存储它们,并且网站在检索数据时将正确显示。
其他信息
使用下面的数据库日志记录代码,我能够看到正在使用的 SQL 实体框架。
dbContext.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);
看似没问题的SQL。
SET SESSION sql_mode='ANSI';INSERT INTO `Item`(
`Name`,
`Owner_Id`) VALUES (
@gp1,
@gp2);
-- @gp1: 'The_α_1' (Type = String, IsNullable = false, Size = 7)
-- @gp2: '7a897e05-cc87-410b-bc80-70c75abae95b' (Type = String, IsNullable = false, Size = 36)
有任何想法吗?谢谢你的帮助。