2011-01-07 36 views
0

我有一个应用程序从数据库中获取条件以作为字符串条目列表运行。数据库表中设置了该列的nvarchar以包含所有外来字符。现在在某些情况下,像ä这样的字符在从数据库获取条款时会清楚地显示,甚至在表格中显示。 导入日文或阿拉伯文字符时,我看到的全部是????????。 现在我已经尝试使用不同的方法转换它,首先将其转换为utf8编码,然后返回,然后再次使用httputility.htmlencode,这是完美的,当它是这些字符,但然后转换引号和其他东西,我不需要它做。 现在我指责数据库设计师,他需要做些什么,但我错了,因为数据库应该显示所有这些字符,并且可以很容易地查询它并添加到我的ssearch列表中。如果不是有一个一致的方式,让所有国际字符在SQL和VB.net中正确显示.net中的文本编码,sql服务器处理

我知道什么时候我从文本文件中读取我刚刚使用Microsoft.visualbasic.textfieldparser阅读器工具,编码设置为utf8这不会是一个问题。

回答

1

如果数据库字段是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猴子。 .. :-)

+0

这就是我想,但他口口声声说其罚款。像ü,ö这样的字符显示正确,虽然当我尝试一个日语术语,我手动导入到表中它显示为?????但是当我通过vb.net查询时,我看到了正确的日文字符,所以我同意它不能成为我。有没有任何通用的工具来避免这种情况 – vbNewbie 2011-01-07 17:21:15

0

总是尝试使用NVARCHAR或NTEXT来存储外国字符。 您不能将UNICODE存储在varchar或ot text数据类型中。 也把A N字符串值

像以前一样

UPDATE [USER] 
SET Name = N'日本語' 
WHERE ID = XXXX;