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

Posted

技术标签:

【中文标题】将日文字符插入 SQL Server 数据库【英文标题】:Inserting Japanese Characters To SQL Server database 【发布时间】:2018-10-18 17:13:38 【问题描述】:

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

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

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

ケンガンアシュラ

数据库显示为:

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

型号:

 [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));

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

更新:在我的情况下,解决方案只是在模型构建器或模型类中解释了关系 btw 表和 Unicode 属性设置为 false,因此我将其更改为 true 并解决了:

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

【问题讨论】:

无论将该字符串传递给数据库,都需要在该字符串前面加上一个 N。比较 SELECT 'ケンガンアシュラ', N'ケンガンアシュラ'; 这个东西在某个时候会生成 SQL 命令吗?它是什么样子的?你能拦截它并编辑它吗?也许你应该调用一个存储过程而不是让这个东西生成临时 SQL。 在插入时使用 N 前缀值。 INSERT INTO INFORMATIONS(SOME_TEXT) VALUES(N'your chars') 我正在使用 Linq,当我添加到 db 时我不处理该值,因为我使用的是 asp mvc 实体,所以我只需将模型与所有值一起添加到 db 一次跨度> 我觉得这个链接对你有帮助***.com/questions/12632240/… 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

列应该是 nvarchar

create table yourTableName(yourColumnName nvarchar(50));

INSERT INTO yourTableName(yourColumnName) VALUES(N'ケンガンアシュラ');

【讨论】:

已经是我的属性类型 nvarchar!而且我没有将它作为字符串添加到数据库中,我像这样添加它:model.post=japaniesWord; 试试这个 model.post= N'japaniesWord' 。我的意思是model.post = N'ケンガンアシュラ' 不工作..我也将我从视图中得到的分配给模型..我得到一个数据模型然后我像这样分配它 model.post=oldmodel.japaword; 字符串类型应为 nvarchar。如果是,那么试试这个 model.post='N' + oldmodel.japaword 如果这个 model.post= 'N' + oldmodel.japaword 不起作用那么。我认为您需要在执行此操作之前将其转换为 c# 中的 nvarchar。

以上是关于将日文字符插入 SQL Server 数据库的主要内容,如果未能解决你的问题,请参考以下文章

日文符号“?”插入sql-server2005乱码问题

SQL Server 插入含有中文字符串出现乱码现象的解决办法

将日文字符从 TextBox 存储到 SQL 表

将特殊字符(大于/小于或等于符号)插入 SQL Server 数据库

尝试将字符串插入 SQL Server 时出现问题

甲骨文写日文字符