Вопрос по sql, sql-server – Что означает префикс N в операторах T-SQL?

294

Я видел префикс N в некоторых запросах вставки T-SQL. Многие люди использовалиN перед вставкой значения в таблицу.

Я искал, но я не смог понять, что является целью включенияN перед вставкой каких-либо строк в таблицу.

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

Ваш Ответ

4   ответа
4

Предполагая, что значение имеет тип nvarchar, для этого только мы используем N '' '

13

позвольте мне рассказать вам, что раздражает то, что произошло с N ''; префикс . и я не смог починить 2 дня.

Моя сортировка БДSQL_Latin1_General_CP1_CI_AS.

это стол. колонкаMyCol1 являетсяNvarchar

но этот запросfails to match Exact Ценность, которая существует.

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 İ вот почему это не удается, я полагаю.

1
  1. Performance:

Предположим, ваше предложение where выглядит следующим образом:

WHERE NAME='JON'

Если столбец NAME относится к какому-либо типу, кроме nvarchar или nchar, не следует указывать префикс N. Однако, если столбец NAME имеет тип nvarchar или nchar, то, если вы не укажете префикс N, то «JON» рассматривается как не-Unicode. Это означает, что тип данных столбца NAME и строки «JON»; они различаются, поэтому SQL Server неявно преобразует тип одного операнда в другой. Если SQL Server преобразует литеральный тип с типом столбца, тогда нет никаких проблем, но если это произойдет иначе, производительность будет снижена, потому что индекс столбца (если доступен) не будет использоваться.

  1. Character set:

Если столбец имеет тип nvarchar или nchar, всегда используйте префикс N при указании строки символов в предложении WHERE / UPDATE / INSERT. Если вы этого не сделаете, и один из символов в вашей строке будет Unicode (например, международные символы - пример - & # x101;), то произойдет сбой или повреждение данных.

356

Он объявляет строку какnvarchar тип данных, а неvarchar

You may have seen Transact-SQL code that passes strings around using an N prefix. This denotes that the subsequent string is in Unicode (the N actually stands for National language character set). Which means that you are passing an NCHAR, NVARCHAR or NTEXT value, as opposed to CHAR, VARCHAR or TEXT.

Цитироватьот Microsoft:

Prefix Unicode character string constants with the letter N. Without the N prefix, the string is converted to the default code page of the database. This default code page may not recognize certain characters.


Если вы хотите узнать разницу между этими двумя типами данных, посмотрите этот пост:

В чем разница между varchar и nvarchar?

Error: User Rate Limit ExceededNError: User Rate Limit ExceededCHAR, VARCHAR or TEXTError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededdatabases aspfaq comError: User Rate Limit Exceededfkref com, za1 zeroredirect1 com, i0z13 trackvoluum comError: User Rate Limit Exceeded

Похожие вопросы