在脚本中将N放在字符串前面有什么缺点吗?它被认为是"最佳做法"吗?

jco*_*lum 11 sql sql-server unicode

假设我有一个包含varchar字段的表.如果我像这样插入:

INSERT MyTable 
 SELECT N'the string goes here'
Run Code Online (Sandbox Code Playgroud)

这与之间有什么根本区别:

INSERT MyTable 
 SELECT 'the string goes here'
Run Code Online (Sandbox Code Playgroud)

我的理解是,如果字符串包含Unicode字符且目标列不是unicode,则只会出现问题.除此之外,SQL处理它很好并将字符串N''转换为varchar字段(基本上忽略了N).

我的印象是N在弦乐前面是一个很好的练习,但我无法找到任何关于它的讨论我认为是确定的.

Aar*_*ght 6

您应该为字符串添加前缀Nnvarchar(...)列或参数的前缀.如果它们的目的地是varchar(...)列或参数,则省略它,否则最终会进行不必要的转换.

N无论它是什么,它绝对不是一个坚持在每个字符串前面的"最佳实践" .

  • @jcollum:事实上,最好的做法是使用实​​际上正确的东西.有人可能会查看您的查询并错误地断定该列实际上不支持Unicode字符. (2认同)

Mat*_*tin 3

简短的回答:对于脚本来说很好,对于生产代码来说不好。

这不被认为是最佳实践。它有一个缺点,当 2 字节字符转换为 1 字节字符时,它会对性能产生微小的影响。

如果不知道插入要去哪里,或者不知道源文本来自哪里(假设这是一个通用数据插入实用程序,它为未知目标生成插入语句,例如导出数据时),则 N “foo”可能是更具防御性的编码风格。

因此,缺点很小,优点是您的脚本代码更能适应数据​​库结构的变化。这可能就是您在批量数据插入脚本中看到它的原因。

但是,如果有问题的代码是为了在您关心代码质量的环境中重用,则不应使用,N'the string'因为您正在添加不必要的转换。