Entity Framework C# Insert Data 俄语编码问题

Posted

技术标签:

【中文标题】Entity Framework C# Insert Data 俄语编码问题【英文标题】:Entity Framework C# Insert Data russian encoding problems 【发布时间】:2011-08-18 20:49:02 【问题描述】:

我在我的项目中使用 EDM 模型。

当我通过 post 请求在数据库中插入俄语单词时,我得到 ??????

控制器:

[Authorize]
[HttpPost]
public string DescEdit(FormCollection formValues)

    var CurrentUserPhoto = User.Identity.Name;
    string x = Request.Form["id"];
    Int64 id = Convert.ToInt64(x);
    photos upPhotoDesc = photosRepository.GetPhotosById(id, CurrentUserPhoto);
    upPhotoDesc.description = Request.Form["value"];
    photosRepository.Save();

    return Request.Form["value"];

    在数据库中所有字符集都设置为 utf-8 在布局页面内容enc类型是utf-8

数据库代码:

CREATE TABLE `photos` (
  `id` bigint(255) NOT NULL AUTO_INCREMENT,
  `done` tinyint(1) NOT NULL DEFAULT '0',
  `imgsmall` varchar(255) NOT NULL DEFAULT '',
  `imgcrop` varchar(255) NOT NULL DEFAULT '',
  `imgmiddle` varchar(255) NOT NULL DEFAULT '',
  `imgbig` varchar(255) NOT NULL DEFAULT '',
  `full_size` varchar(255) NOT NULL DEFAULT '',
  `description` varchar(255) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `permission` tinyint(1) NOT NULL DEFAULT '0',
  `userid` int(11) NOT NULL DEFAULT '0',
  `userlogin` varchar(255) NOT NULL DEFAULT '',
  `rating` smallint(5) DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `indx_photos_1` (`id`,`userlogin`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci;

【问题讨论】:

好吧,事件链中的 something 必须在与过时的字符集之间进行有损转换。您需要识别该内容并确保它使用 Unicode。 在黑暗中射击:您确定数据库实际上包含问号吗?也许只有你用来查看数据库的东西会显示问号。 我已经在 2 小时内试图了解这个“东西”在哪里 :)) 您是否使用调试器单步执行了代码并确保Request.Form["value"] 仍然包含正确的西里尔字母? 如果你还没有看过我最近写了这篇关于 php/LAMP 中常见字符集问题的文章webmonkeyuk.wordpress.com/2011/04/23/… 【参考方案1】:

在实体框架的连接字符串中添加charset=utf8 这是一个有效的添加节点:

<add name="photostorageEntities"
     connectionString="metadata=res://*/Models.Photos.csdl|res://*/Models.Photos.ssdl|res://*/Models.Photos.msl;provider=mysql.Data.MySqlClient;provider connection string=&quot;server=ServerIP;User Id=UID;password=PASS;Persist Security Info=True;database=photostorage; Charset=utf8&quot;"
     providerName="System.Data.EntityClient" />

【讨论】:

谢谢你 - 让我头疼! 添加 charset=utf8 导致“不支持嵌套事务”错误:(

以上是关于Entity Framework C# Insert Data 俄语编码问题的主要内容,如果未能解决你的问题,请参考以下文章

Entity Framework C# Insert Data 俄语编码问题

C# Entity Framework中的IQueryable和IQueryProvider详解

C# Entity Framework中的IQueryable和IQueryProvider详解

在 C# Entity Framework 中阅读 Oracle SYS_REFCURSOR?

Linux 上的 C# DotNet Entity Framework Core Migrations 错误

C# Entity Framework Core Migrations 最佳实践