[这是不关于 NVARCHAR 或如何存储中国字符的问题]
SQL Server 2008 Express
数据库归类是SQL_Latin1_General_CP1_CI_AS
create table sample1(val varchar(2))
insert into sample1 values(N'中文')
我不知道的是:为什么运行insert语句时没有“字符串太长”的错误?
为什么人们会投票这个问题?真的?
答案 0 :(得分:2)
发生隐含的演员表。如果“val”创建为nvarchar(2),这将起作用。
答案 1 :(得分:1)
对@marc_s回答的更多解释。
字符N'中文'
将使用整理varchar
转换为SQL_Latin1_General_CP1_CI_AS
。由于代码页中没有这样的字符,因此它将转换为未定义,最后为0x3f3f
。 0x3f
是问号,因此在这种情况下会出现两个问号,并且不会超出列长。
答案 2 :(得分:0)
尝试使用 NVARCHAR(...),NCHAR(...)数据类型 -
CREATE TABLE dbo.sample1
(
val NVARCHAR(4)
)
INSERT INTO dbo.sample1
SELECT N'中文'