SQL的where子句中的'N'

Ste*_*eam 16 sql sql-server

我在某处看到了这个查询 -

SELECT *
FROM HR.Employees
WHERE country <> N'JAP';
Run Code Online (Sandbox Code Playgroud)

"N"是什么意思?我不确定这是否仅对SQL服务器有效.

Aar*_*and 33

N代表"国家字符",它表示字符串的内容是Unicode.

每当遇到可能包含默认ASCII字符集之外的字符的专有名称或其他实体时,您应该使用Unicode(nchar/ nvarchar).如果不使用N前缀包围此类字符串,则会丢失数据.例如:

SELECT N'?? ???? ???', '?? ???? ???';
Run Code Online (Sandbox Code Playgroud)

结果:

-----------        -----------
?? ???? ???        ?? ???? ???
Run Code Online (Sandbox Code Playgroud)

您还应该确保N在您的WHERE或其他子句中使用前缀对n(var)char列.如果不使用N前缀,则可能会因隐式转换而出现严重的性能问题.