SQL Server字符集和N前缀

时间:2013-05-17 10:06:31

标签: sql-server character-encoding sql-server-2008-express

[这是关于 NVARCHAR 或如何存储中国字符的问题]

SQL Server 2008 Express

数据库归类是SQL_Latin1_General_CP1_CI_AS

create table sample1(val varchar(2))
insert into sample1 values(N'中文')
  1. 我知道这些汉字会变成垃圾字符。
  2. 我知道我可以使用nvarchar克服所有问题。
  3. 我不知道的是:为什么运行insert语句时没有“字符串太长”的错误?

    1. N前缀表示客户端将使用UNICODE对字符串进行编码。
    2. 2个汉字将变为4个字节。
    3. varchar(2)只能包含2个字节。
    4. 为什么人们会投票这个问题?真的?

3 个答案:

答案 0 :(得分:2)

发生隐含的演员表。如果“val”创建为nvarchar(2),这将起作用。

答案 1 :(得分:1)

对@marc_s回答的更多解释。

字符N'中文'将使用整理varchar转换为SQL_Latin1_General_CP1_CI_AS。由于代码页中没有这样的字符,因此它将转换为未定义,最后为0x3f3f0x3f是问号,因此在这种情况下会出现两个问号,并且不会超出列长。

答案 2 :(得分:0)

尝试使用 NVARCHAR(...),NCHAR(...)数据类型 -

CREATE TABLE dbo.sample1
(
    val NVARCHAR(4)
)
INSERT INTO dbo.sample1 
SELECT N'中文'