Sql server net中的文本编码,sql server处理

Sql server net中的文本编码,sql server处理,sql-server,vb.net,character-encoding,types,Sql Server,Vb.net,Character Encoding,Types,我有一个应用程序,它从数据库中获取术语,作为字符串术语列表运行。DB表是使用nvarchar为该列设置的,以包含所有外来字符。现在,在某些情况下,当从DB中获取术语时,像ä这样的字符将清晰地出现,甚至在表中显示。 当导入日语或阿拉伯语字符时,我看到的都是????????。 现在我试着用不同的方法来转换它,首先将它转换成utf8编码,然后再转换回来,然后使用httputility.htmlencode,当它是这些字符时,它可以很好地工作,但随后转换引号和其他我不需要它做的事情。 现在我指责db设计

我有一个应用程序,它从数据库中获取术语,作为字符串术语列表运行。DB表是使用nvarchar为该列设置的,以包含所有外来字符。现在,在某些情况下,当从DB中获取术语时,像ä这样的字符将清晰地出现,甚至在表中显示。 当导入日语或阿拉伯语字符时,我看到的都是????????。 现在我试着用不同的方法来转换它,首先将它转换成utf8编码,然后再转换回来,然后使用httputility.htmlencode,当它是这些字符时,它可以很好地工作,但随后转换引号和其他我不需要它做的事情。 现在我指责db设计人员他需要做一些事情,但我错了吗?db应该显示所有这些字符,并且可以轻松地查询并添加到我的ssearch列表中。如果没有,是否有一种一致的方法可以让所有国际字符在SQL和VB.net中正确显示


我知道当我读取文本文件时,我只是使用了Microsoft.visualbasic.textfieldparser reader工具,编码设置为utf8,这不会是问题。

如果数据库字段为nvarchar,则它将正确存储数据。如你所见

在数据到达数据库之前的某个地方,数据正在丢失或更改为varchar:存储过程、参数、文件编码、ODBC转换等

DECLARE @foo nvarchar(100), @foo2 varchar(100)

--with arabic and japanese and proper N literal
SELECT @foo = N'العربي   日本語', @foo2 = N'العربي   日本語'
SELECT @foo, @foo2 -- gives العربي   日本語

--now a varchar literal
SELECT @foo = 'العربي   日本語', @foo2 = 'العربي   日本語'
SELECT @foo, @foo2 --gives ??????   ???

--from my Swiss German keyboard. These are part of my code page.
SELECT @foo = 'öéäàüè', @foo2 = 'öéäàüè'
SELECT @foo, @foo2 --gives ??????   ???

所以,向善良的DB猴子道歉…:-)

始终尝试使用NVARCHAR或NTEXT存储外来字符esr。 不能将UNICODE存储在varchar ot text数据类型中。 在字符串值前面加一个N


我也是这么想的,但他一直说没事。但是,像ü,ö这样的字符显示正确,当我尝试一个日语术语时,我手动将其导入到表中,它显示为?????但是当我通过vb.net查询它时,我正确地看到了日文字符,所以我同意它不可能是我。有什么通用工具可以避免这种情况吗谢谢你的回复,非常有用。你认为有没有一种方法可以查询它并将“N”放在前面?就像从表中选择Nfoo…这是不需要的:foo已经是nvarchar了。在SQL调用之后,这一点正在丢失
UPDATE [USER]
SET Name = N'日本語'
WHERE ID = XXXX;