sql语句中前缀n的含义是什么?我应该在什么时候使用它?

gg0vcinb  于 2021-08-13  发布在  Java
关注(0)|答案(4)|浏览(503)

我在一些insert t-sql查询中看到了前缀n。很多人用过 N 在表中插入值之前。
我搜索了一下,但是我不明白把这些信息包括进来的目的是什么 N 在将任何字符串插入表之前。

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

这个“n”字首的作用是什么?应该在什么时候使用?

cgvd09ve

cgvd09ve1#

它将字符串声明为 nvarchar 数据类型,而不是 varchar 您可能见过使用n前缀传递字符串的transact-sql代码。这表示后面的字符串是unicode格式的(n实际上代表国家语言字符集)。这意味着您传递的是nchar、nvarchar或ntext值,而不是char、varchar或text。
引用微软的话:
以字母n作为unicode字符串常量的前缀。如果没有n前缀,字符串将转换为数据库的默认代码页。此默认代码页可能无法识别某些字符。
如果您想知道这两种数据类型之间的区别,请参阅以下文章:
varchar和nvarchar有什么区别?

yrefmtwq

yrefmtwq2#

让我告诉你一件发生在 N' 前缀-我有两天没修好。
我的数据库排序规则是sql\u latin1\u general\u cp1\u ci\u 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!!!!

为什么?因为拉美裔将军没有大点i̇ 我想这就是它失败的原因。

jqjz2hbq

jqjz2hbq3#

1.性能:
假设where子句如下:

WHERE NAME='JON'

如果名称列是nvarchar或nchar以外的任何类型,则不应指定n前缀。但是,如果名称列的类型为nvarchar或nchar,则如果未指定n前缀,则“jon”将被视为非unicode。这意味着name列和字符串'jon'的数据类型不同,因此SQLServer会隐式地将一个操作数的类型转换为另一个操作数的类型。如果sql server将文本的类型转换为列的类型,则没有问题,但是如果它以其他方式转换,则性能将受到影响,因为列的索引(如果可用)将不会被使用。
2.字符集:
如果列的类型为nvarchar或nchar,则在where criteria/update/insert子句中指定字符串时,始终使用前缀n。如果不这样做,字符串中的一个字符是unicode(如国际字符-示例-ā) 然后它将失败或遭受数据损坏。

n3h0vuf2

n3h0vuf24#

假设值是nvarchar类型,我们只使用n“”

相关问题