我有一个应用程序,它从DB获取术语作为字符串术语列表运行。使用nvarchar为该列设置了DB表,以包含所有外来字符。现在在某些情况下,当从数据库中获取术语时,像ä这样的字符会清楚地显示,甚至会在表格中显示出来。 在导入日语或阿拉伯语字符时,我看到的只是????????。 现在我尝试使用不同的方法转换它,首先将其转换为utf8编码然后返回,然后使用httputility.htmlencode,当它是这些字符时可以很好地工作,但然后转换引号和其他我不需要它的东西。 现在我指责数据库设计师他需要做一些事情,但我错了,因为数据库应该显示所有这些字符,并且很容易查询它并添加到我的搜索列表中。如果没有,那么是否有一致的方法可以在SQL和VB.net中正确显示所有国际字符
我知道当我从文本文件中读取时,我只使用了编码设置为utf8的Microsoft.visualbasic.textfieldparser阅读器工具,这不是问题。
答案 0 :(得分: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猴道歉......: - )
答案 1 :(得分:0)
始终尝试使用NVARCHAR或NTEXT来存储外国字符。 您不能将UNICODE存储在varchar ot text数据类型中。 还要在字符串值之前加上N
喜欢
UPDATE [USER]
SET Name = N'日本語'
WHERE ID = XXXX;