2016-12-07 25 views
0

我有一个MS SQLServer与nVarchar列的表。我正在使用insert语句保存UTF-8字符。它被保存为???。如果我通过更新语句使用相同的值更新同一列,它将被正确保存。UTF-8字符被保存为?插入,但得到更新保存正确

任何暗示这里会有什么问题?使用的排序规则是:SQL_Latin1_General_CP1_CI_AS

回答

2

显示您的插入语句。有 - 很可能 - 一个N缺失:

DECLARE @v NVARCHAR(100)='Some Hindi from Wikipedia मानक हिन्दी'; 
SELECT @v; 

结果:Some Hindi from Wikipedia ???? ??????

SET @v=N'Some Hindi from Wikipedia मानक हिन्दी'; 
SELECT @v; 

结果:Some Hindi from Wikipedia मानक हिन्दी

在字符串常量前的N告诉SQL-Server来解释内容为unicode。否则它将被视为utf-8,它不能处理所有字符...

+0

感谢您的快速回复...但对于具有相似结构和排序规则的另一个表,它正确插入时不带N前缀。我想知道这里可能是什么原因。 – Supriya

+0

@Supriya简单的答案:**不要这样做**如果你依赖系统的能力来正确地阅读你的文本,它可能会工作,下次不会......处理'NVARCHAR'应该总是** **用'N'Some字符串'与文字完成。否则,它是赌博... – Shnugo

+0

再次感谢您的快速回答...我创建了具有问题的表格的确切副本,并且插入语句在那里工作得很好。然后我检查了架构上的其他几张表(所有的nvarchar),并且它们也以一致的方式正常工作。所以我不明白这个特定表格的特殊问题是什么?我明白你的意思,我们需要前缀N.但我正在尝试从Java插入,它仍然击败我如何一致地工作在其他表上。 insert语句插入table1(c1,c2,c3)值('','','')中,其值被设置为希腊字符。 – Supriya

相关问题