将日文字符插入 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 Server 插入含有中文字符串出现乱码现象的解决办法