2012-04-05 55 views
243

我在某些插入T-SQL查询中看到了前缀N.在将值插入表格之前,许多人已使用NT-SQL语句中前缀N的含义是什么?

我搜索了,但我无法理解在将任何字符串插入表之前,包含N的目的是什么。

INSERT INTO Personnel.Employees 
VALUES(N'29730', N'Philippe', N'Horsford', 20.05, 1), 

回答

300

声明它的字符串作为nvarchar数据类型,而不是varchar

你可能已经看到,绕过使用 一个N前缀字符串的Transact-SQL代码。这表示后续字符串采用Unicode (N实际上代表国家语言字符集)。其中 表示您传递的是NCHAR,NVARCHAR或NTEXT值,因为 与CHAR,VARCHAR或TEXT相对。

引述from Microsoft

前缀统一用字母N的字符串常量没有 N个前缀,该字符串转换为 数据库的默认代码页。 此默认代码页可能无法识别某些字符


如果你想知道这两个数据类型之间的差异,请参阅本SO帖子:

What is the difference between varchar and nvarchar?

+1

@Curt这意味着我shuld只有当我使用以下数据类型'CHAR,VARCHAR或TEXT'时才使用'N'?因为'NCHAR,NVARCHAR或NTEXT'本质上是存储UNICODE,我不需要单独添加它....这是真的吗? – Pritesh 2012-08-04 11:23:00

+0

@Pritesh - 仅当您使用的默认代码页可能无法识别上面的粗体文本中的unicode字符时。 – Todd 2015-09-01 12:32:29

+4

@Curt连接到'databases aspfaq com'重定向到非常可疑的网站('fkref com','za1 zeroredirect1 com','i0z13 trackvoluum com'),它们被我们公司的防火墙标记为色情,恶意网站和垃圾邮件网址。我已联系了aspfaq.com所有者并编辑了删除链接的答案。 – jaume 2015-11-26 08:17:59

4

假设值是nvarchar的类型,只有我们使用N” '

4

让我告诉你什么N件事的前缀发生恼人的事情。我无法修复2天。我的db归类为SQL_Latin1_General_CP1_CI_AS

有一张桌子。列MyCol1nvarchar的

但此查询未能精确匹配价值存在。

SELECT TOP 1 * FROM myTable1 WHERE MyCol1 = 'ESKİ' 

// 0 result 

使用前缀N '' 修复它

SELECT TOP 1 * FROM myTable1 WHERE MyCol1 = N'ESKİ' 

// 1 result - found!!!! 

为什么呢?因为latin1_general没有big dotted©这就是为什么它失败我想。

相关问题