将日语字符插入SQL Server数据库

时间:2018-10-18 17:13:39

标签: sql asp.net sql-server asp.net-mvc

我有一个问题,当我尝试向数据库中插入日语单词时。它插入了它们,但是当我检查单词时,它看起来像这样:“ ??????”

因此,我在stackoverflow中进行了探索,并尝试了许多解决方案,但失败了,但我仍然遇到相同的问题。如果有人可以帮助,这是我的代码:

这是我在文本框中输入的词:

ケンガンアシュラ

数据库将其显示为:

????????????

型号:

 [Display(Name = "Alternative Name")]
 [StringLength(200)]
 public string Alternative_Name { get; set; }

在SQL Server中,其数据类型为

nvarchar(200)

这是我的观点:

<div class="form-group">
    <h4>@Html.LabelFor(model => model.Alternative_Name, new { @class = "control-label col-md-3" })</h4>
    <div class="col-md-6">
        @Html.EditorFor(model => model.Alternative_Name, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Alternative_Name, "", new { @class = "text-danger" })
    </div>
</div>

我尝试使用迁移对其进行更新,并将Unicode更改为true:

  AlterColumn("dbo.Post", "Alternative_Name", c => c.String(maxLength: 200, unicode: true));

但是没有任何效果,数据库一直将其显示为?????

更新:就我而言,该解决方案仅在模型构建器或模型类中进行,该解释器解释了Unicode的btw表和属性之间的关系,因此我将其更改为true并解决了: >

 modelBuilder.Entity<Post>()
            .Property(e => e.Alternative_Name)
            .IsUnicode(true);

3 个答案:

答案 0 :(得分:0)

.Net中的字符串默认为unicode,应将日语作为NVarchar传递给数据库

在模型上使用数据注释来告诉.net使用Column(TypeName =“ NVarchar”)]是什么类型

Column(TypeName ="NVarchar")]
[Display(Name = "Alternative Name")]
 [StringLength(200)]
 public string Alternative_Name { get; set; }

答案 1 :(得分:0)

在SQL Server数据库中,您应该位于要在其中插入数据的列上,将类型设置为NVARCHAR(3000)。

答案 2 :(得分:-1)

该列应位于nvarchar中

public static void CollectionRefresh<T>(this ObservableCollection<T> collection, List<T> items)
{
   //Method Content

   PropertyInfo[] properties = typeof(T).GetProperties();


   foreach(PropertyInfo property in properties)
   {
      if (property.PropertyType.IsGenericType && typeof(ObservableCollection<>).IsAssignableFrom(property.PropertyType.GetGenericTypeDefinition()))
      {
        MethodInfo refreshMethod = property.PropertyType.GetMethod("CollectionRefresh");

        var instanceT1 = Expression.Parameter(typeof(T), "otherT1");
        var instanceT2 = Expression.Parameter(typeof(T), "otherT2");
        var prop1 = Expression.Call(instanceT1, property.GetMethod);
        var prop2 = Expression.Call(instanceT2, property.GetMethod);
        var collection1 = Expression.Convert(prop1, property.PropertyType);
        var collection2 = Expression.Convert(prop2, property.PropertyType);
        var refresh = Expression.Call(collection1, refreshMethod, collection2);
        var lambda = Expression.Lambda<Action<T, T>>(refresh, instanceT1, instanceT2);

        Action<T, T> func = lambda.Compile();
        func(oldCollection, newList);
      }
   }

   //Method Content
}