0

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

SQL Server 2008 速成版

数据库排序规则是SQL_Latin1_General_CP1_CI_AS

create table sample1(val varchar(2))
insert into sample1 values(N'中文')
  1. 我知道这些汉字会变成垃圾字。
  2. 我知道我可以使用 nvarchar 来克服所有问题。

我不知道的是:为什么我运行插入语句时没有“字符串太长”错误?

  1. N 前缀表示客户端将使用 UNICODE 对字符串进行编码。
  2. 2个汉字会变成4个字节。
  3. varchar(2) 只能包含 2 个字节。

为什么人们对这个问题投反对票?真的吗?

4

3 回答 3

2

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

于 2013-05-17T10:31:40.707 回答
1

对@marc_s 答案的更多解释。

该字符N'中文'varchar使用排序规则转换为SQL_Latin1_General_CP1_CI_AS。由于代码页中没有这样的字符,它会转换为未定义,0x3f3f最后。0x3f是问号,所以这种情况下会有两个问号,不会超过列长。

于 2014-08-04T07:50:15.810 回答
0

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

CREATE TABLE dbo.sample1
(
    val NVARCHAR(4)
)
INSERT INTO dbo.sample1 
SELECT N'中文'
于 2013-05-17T10:24:57.680 回答