为什么sql server在NVarchar字段中存储问号字符而不是日文字符?

时间:2009-04-17 16:05:30

标签: sql-server

我正在尝试将日文字符存储在SQL Server 2000数据库的nvarchar字段中。

当我运行更新语句时:

update blah 
set address = N'スタンダードチャ'
where key_ID = 1
从SQL Server Management Studio

,然后运行一个select语句我只看到返回到结果窗口的问号。我在网页上看到了相同的问号,看着数据库。

这似乎是存储正确数据的问题吗?谁能告诉我我需要采取哪些不同的做法?

8 个答案:

答案 0 :(得分:93)

根据你的例子,这不是一个正确的答案,但我看到的最常见的原因是字符串文字不需要unicode N前缀。

所以,而不是

set address = N'スタンダードチャ'

可以尝试写入没有unicode前缀的nvarchar字段

set address = 'スタンダードチャ'

另见: N prefix before string in Transact-SQL query

答案 1 :(得分:12)

在DB nvarchar字段中存储时使用印度语字符时遇到同样的问题。然后我浏览了这篇微软文章 -

http://support.microsoft.com/kb/239530

我遵循了这一点,我的unicode问题得到了解决。在本文中,他们说 - 当你在SQL Server中处理Unicode字符串常量时,你必须在所有带有前缀N 的Unicode字符串之前

SQL Server Unicode支持

SQL Server Unicode数据类型支持UCS-2编码。 Unicode数据类型使用每个字符的两个字节而不是一个字节来存储字符数据。两个字节中有65,536种不同的位模式,因此Unicode可以使用一组标准位模式对所有语言中的每个字符进行编码,包括具有大量字符的中文等语言。

在SQL Server中,支持Unicode数据的数据类型为:

nchar
nvarchar
nvarchar(max) – new in SQL Server 2005
ntext

使用nchar,nvarchar,nvarchar(max)和ntext分别与char,varchar,varchar(max)和text相同,但以下情况除外:

- Unicode supports a wider range of characters.
- More space is needed to store Unicode characters.
- The maximum size of nchar and nvarchar columns is 4,000 characters, not 8,000     characters like char and varchar.
- Unicode constants are specified with a leading N, for example, N'A Unicode string'

适用

Microsoft SQL Server 7.0 Standard Edition
Microsoft SQL Server 2000 Standard Edition
Microsoft SQL Server 2005 Standard Edition
Microsoft SQL Server 2005 Express Edition
Microsoft SQL Server 2005 Developer Edition
Microsoft SQL Server 2005 Enterprise Edition
Microsoft SQL Server 2005 Workgroup Edition

答案 2 :(得分:4)

您需要从数据库,数据访问和表示层检查处理此数据的所有代码的全球化设置。这包括SSMS。

(您还需要确定您使用的是哪个版本,2003不存在...)

答案 3 :(得分:2)

你需要在字符串值之前写入N. 例如INSINS INTO LabelManagement(KeyValue)VALUES (N '変更命令'); 这里我用日语存储值,我在字符串前添加了N. 我正在使用Sql server 2014。 希望你找到解决方案。 享受。

答案 4 :(得分:1)

SSMS无法正确显示,您可能会看到问号或方框

将结果粘贴到word中,它们应该是日语

在网页中您需要设置内容类型,下面的代码将显示中文Big5

<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=big5"> 

要验证您不能使用ascii的数据,因为ascii只能看到ascii字符集

运行此

  

选择unicode(地址),ascii(地址)   来自blah,其中key_ID = 1

输出应该如下(它只查看第一个字符) 12473 63

答案 5 :(得分:1)

我几乎可以保证数据类型不是unicode。如果您想了解更多信息,可以查看Wikipedia以获取有关Unicode,ASCII和ANSI的信息。 Unicode可以存储更多唯一字符,但需要更多空间来存储,传输和处理。还有一些程序和其他东西不支持unicode。 MS SQL的unicode数据类型是“nchar”,“nvarchar”和“ntext”。

答案 6 :(得分:0)

我们正在使用Microsoft SQL Server 2008 R2(SP3)。我们的表格排序规则为SQL_Latin1_General_CP1_CI_AS。我将我的类型指定为n种

nvarchar(MAX)
nchar(2)

...等

要插入日文字符,请在字符串前加上大写字母N

N'素晴らしい一日を'

像魅力一样。

答案 7 :(得分:0)

代码绝对没问题。您可以将带有前缀N的unicode字符串插入声明为NVARCHAR的字段中。那么你可以检查地址是否是NVARCHAR列。在SQL Server 2008R2中测试了下面的代码并且它运行良好。

update blah 
set address = N'スタンダードチャ'
where key_ID = 1

enter image description here