N префікса перед рядком у запиті Transact-SQL


41

Скажіть, будь ласка, коли я повинен використовувати N префікса перед рядком у запиті Transact-SQL? Я почав працювати з базою даних, де я не отримую жодних результатів, використовуючи такий запит

SELECT * FROM a_table WHERE a_field LIKE '%а_pattern%'

поки я не зміню шаблон на N'%а_pattern%'. Мені ніколи не доводилося додавати цей префікс раніше, тому мені цікаво. a_fieldвизначається як nvarchar(255), але я думаю, причина в чомусь іншому.

Відповіді:


31

Наступні статті мають добру інформацію щодо цього питання. Коротка відповідь полягає лише в тому, що між стовпцем unicode та недікодальним рядковим літералом ви використовуєте невідповідність типу. З статті KB схоже, що у деяких випадках пропуск префікса N все ще може працювати, але це залежатиме від кодової сторінки та параметрів порівняння бази даних. Це може пояснити зміни в поведінці, якщо раніше ви мали успіх у методі no-prefix.

https://support.microsoft.com/en-us/kb/239530


6

Це означає, що наступна рядок знаходиться в Unicode (N насправді означає набір символів для національної мови). Що означає, що ви передаєте значення NCHAR, NVARCHAR або NTEXT, на відміну від CHAR, VARCHAR або TEXT. Див. Статтю № 2354 для порівняння цих типів даних.

Unicode зазвичай використовується в додатках для баз даних, які розроблені для полегшення кодових сторінок, які виходять за межі англійської та кодової сторінок Західної Європи, наприклад, китайською. Unicode розроблений так, що розширені набори символів все ще можуть "вписуватися" в колонки бази даних.


3

Я думаю, що N-префікс повідомляє sql-серверу трактувати рядок як значення unicode. Стовпці nvarchar є unicode, тому вам слід використовувати цей синтаксис під час доступу до цих стовпців.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.