Entity Framework C# 插入数据时遇到俄语编码问题

12

我在我的项目中使用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"];
}
  1. 在数据库中所有字符集都设置为utf-8
  2. 在布局页面中的内容编码方式是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;

1
好的,事件链中的某个环节必须正在执行与过时字符集之间的有损转换。您需要识别该环节并确保其使用Unicode。 - Timwi
一时冲动:您确定数据库实际上包含问号吗?也许只有您用来“查看”数据库的工具显示问号。 - Timwi
我已经尝试了2个小时,想弄清楚这个“something”在哪里:)) - Evgeniy Labunskiy
1
你是否使用调试器逐步执行代码,并确保 Request.Form["value"] 仍然包含正确的 Cyrillic 字符? - Timwi
1
如果你还没有看过,我最近写了一篇关于PHP/LAMP常见字符集问题的文章。http://webmonkeyuk.wordpress.com/2011/04/23/how-to-avoid-character-encoding-problems-in-php/ - James C
显示剩余6条评论
1个回答

24
在Entity Framework的连接字符串中添加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" />

谢谢你,这个帮我省了不少麻烦! - Code Magician
3
添加 charset=utf8 导致“不支持嵌套事务”错误 :( - Manu Mohan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接