c# - 通过实体框架将特殊字符(ą、ź 等)插入 varchar 列
问题描述
我正在尝试使用 Entity Framework 6将一些带有特殊字符的字符串插入到我的数据库中,但似乎 EF 在放入 DB 时会更改它们。例如,“zażółć gęślą jaźń”变为“zazólc gesla jazn”。
我想插入我的数据不变并将我的列保持为 varchar。
我已经尝试了一些注释和执行命令,这些命令在创建数据库后改变了排序规则和字符集,但是这些尝试都失败了。
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
using MySql.Data.EntityFrameworkCore.DataAnnotations;
class Program
{
static void Main(string[] args)
{
using (var context = new TestDBContext())
{
context.Database.EnsureDeleted();
context.Database.EnsureCreated();
// tried this
context.Database.ExecuteSqlCommand(
"ALTER DATABASE `TestDB` DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci");
context.insertData();
// result: "lódz" - doesn't work either
context.Database.ExecuteSqlCommand(
"INSERT INTO `testtable` (`Id`, `SpecialCharacters`) VALUES (NULL, 'łódź')");
}
}
}
class TestDBContext : DbContext
{
public Microsoft.EntityFrameworkCore.DbSet<TestTable> TestTable { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySQL("server=localhost;database=TestDB;user=root;password=;SslMode=None;");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<TestTable>()
.HasKey(t => t.Id);
}
// result: "zazólc gesla jazn" instead of "zażółć gęślą jaźń"
public void insertData()
{
using (var context = new TestDBContext())
{
context.TestTable.Add(new TestTable
{
SpecialCharacters = "zażółć gęślą jaźń",
}
);
context.SaveChanges();
}
}
}
class TestTable
{
public int Id { get; set; }
[Column(TypeName = "varchar(17)")]
[MySqlCharset("utf8")] // tried this
[MySqlCollation("utf8_unicode_ci")] // tried this
public string SpecialCharacters { get; set; }
}
(注意context.Database.ExecuteSqlCommand("INSERT INTO...
也违反了数据。通过控制台(没有 EF)添加这样的数据就可以了。)
最后,我的问题:如何使用实体框架将带有特殊字符的字符串插入 DB 中的 varchar 列?
解决方案
推荐阅读
- php - API 无法调用 initSession 它显示 404 页面
- java - 如何在我的代码中避免 java.lang.NullPointerException?
- mysql - 在 MySQL 中限制用户正确的读/写/更新权限
- javascript - 如何直接读取和写入 imageBitMap
- python - Python Standalone Executable 文件未运行并在命令提示符中显示错误
- amazon-web-services - AWS CloudFormation:在引用另一个安全性时创建安全组失败
- amazon-web-services - Jenkins Poll SCM 显示下一次检查是次日
- excel - 当列中的任何值与指定值匹配时显示 MsgBox
- javascript - 我的 html 代码没有读取 js 函数