我在某些插入T-SQL查询中看到了前缀N.在将值插入表格之前,许多人已使用N
。T-SQL语句中前缀N的含义是什么?
我搜索了,但我无法理解在将任何字符串插入表之前,包含N
的目的是什么。
INSERT INTO Personnel.Employees
VALUES(N'29730', N'Philippe', N'Horsford', 20.05, 1),
我在某些插入T-SQL查询中看到了前缀N.在将值插入表格之前,许多人已使用N
。T-SQL语句中前缀N的含义是什么?
我搜索了,但我无法理解在将任何字符串插入表之前,包含N
的目的是什么。
INSERT INTO Personnel.Employees
VALUES(N'29730', N'Philippe', N'Horsford', 20.05, 1),
声明它的字符串作为nvarchar
数据类型,而不是varchar
你可能已经看到,绕过使用 一个N前缀字符串的Transact-SQL代码。这表示后续字符串采用Unicode (N实际上代表国家语言字符集)。其中 表示您传递的是NCHAR,NVARCHAR或NTEXT值,因为 与CHAR,VARCHAR或TEXT相对。
前缀统一用字母N的字符串常量没有 N个前缀,该字符串转换为 数据库的默认代码页。 此默认代码页可能无法识别某些字符。
如果你想知道这两个数据类型之间的差异,请参阅本SO帖子:
假设值是nvarchar的类型,只有我们使用N” '
让我告诉你什么N件事的前缀发生恼人的事情。我无法修复2天。我的db归类为SQL_Latin1_General_CP1_CI_AS。
有一张桌子。列MyCol1是nvarchar的
但此查询未能精确匹配价值存在。
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©这就是为什么它失败我想。
@Curt这意味着我shuld只有当我使用以下数据类型'CHAR,VARCHAR或TEXT'时才使用'N'?因为'NCHAR,NVARCHAR或NTEXT'本质上是存储UNICODE,我不需要单独添加它....这是真的吗? – Pritesh 2012-08-04 11:23:00
@Pritesh - 仅当您使用的默认代码页可能无法识别上面的粗体文本中的unicode字符时。 – Todd 2015-09-01 12:32:29
@Curt连接到'databases aspfaq com'重定向到非常可疑的网站('fkref com','za1 zeroredirect1 com','i0z13 trackvoluum com'),它们被我们公司的防火墙标记为色情,恶意网站和垃圾邮件网址。我已联系了aspfaq.com所有者并编辑了删除链接的答案。 – jaume 2015-11-26 08:17:59