如何将西里尔符号插入我的数据库?
我有表Articles
和带有CRUD操作的Web API控制器。
Articles { id: int, summary: nvarchar, text: ntext }
如果我使用t-sql插入数据,如
insert into Articles values (1, N'текст', N'еще много текста')
一切正常 - 数据库中的数据还可以 - 所有俄罗斯符号看起来都不错。
但是如果我使用带有问号的ajax字段“text”插入数据:'??? ????? ??????'
$.post("http://localhost:1000/api/articles",
{
id: 1,
summary: "текст",
text: "еще много текста"
}
).always(function(res) {console.log(res)} );
我的错误在哪里?
PS:connectionString如果需要:
<add name="DefaultConnection" connectionString="Data Source=xxx;Initial Catalog=yyy;User ID=zzz;Password=***;" providerName="System.Data.SqlClient"/>
PPS:我正在使用来自WebAPI的deafult自动生成的POST操作:
// POST: api/Articles
[ResponseType(typeof(Article))]
public IHttpActionResult PostArticle(Article article)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.Articles.Add(article);
db.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = article.ArticleId }, article);
}
UPD:
[DataContract]
public class Article
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Summary { get; set; }
[DataMember]
[Column(TypeName = "ntext")]
public string Text { get; set; }
}
答案 0 :(得分:1)
问题是,当您想要使用EF Code First映射NTEXT
列时,您必须非常明确:您必须非常明确,并将列配置为所需类型,但您还必须配置它使用Unicode。为此,您可以使用Fluent API配置,例如使用以下代码覆盖OnModelCreating()
:
modelBuilder
.Entity<Aticle>() // Choose the entity to configure
.Property(c=> c.Text) // Choose the property to configure
.HasColumnType("NTEXT") // Specify the DB type
.IsUnicode(true); // Specify Unicode (for EF internally generated params)
然而,难怪NTEXT
存在问题。来自ntext, text, and image (Transact-SQL) docs:
将来的Microsoft SQL Server版本中将删除ntext ,文本和图像数据类型。 在新的开发工作中避免使用这些数据类型,并计划修改当前使用它们的应用程序。请改用nvarchar(max),varchar(max)和varbinary(max)。