294

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

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

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

 INSERT INTO Personnel.Employees
 VALUES(N'29730', N'Philippe', N'Horsford', 20.05, 1),
  • Error: User Rate Limit Exceededdatabases aspfaq comError: User Rate Limit Exceededfkref com, za1 zeroredirect1 com, i0z13 trackvoluum comError: User Rate Limit Exceeded

    от
  • Error: User Rate Limit ExceededNError: User Rate Limit ExceededCHAR, VARCHAR or TEXTError: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

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

  • 4

    Предполагая

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

  • 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?

  • 1

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

    Performance:

    WHERE NAME='JON'
    

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

    Character set:

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