Wat is de betekenis van het voorvoegsel N in T-SQL-statements en wanneer moet ik het gebruiken?

Ik heb prefix N gezien in sommige insert-T-SQL-query’s. Veel mensen hebben Ngebruikt voordat ze de waarde in een tabel invoegden.

Ik heb gezocht, maar ik kon niet begrijpen wat het doel is van het opnemen van de Nvoordat ik tekenreeksen in de tabel invoegde.

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

Waarvoor dient dit ‘N’-voorvoegsel en wanneer moet het worden gebruikt?


Antwoord 1, autoriteit 100%

Het declareert de string als nvarchardatatype, in plaats van varchar

Misschien heb je Transact-SQL-code gezien die strings doorgeeft met
een N-voorvoegsel. Dit geeft aan dat de volgende tekenreeks in Unicode staat
(de N staat eigenlijk voor Nationale taaltekenset). Die
betekent dat u een NCHAR-, NVARCHAR- of NTEXT-waarde doorgeeft, als
in tegenstelling tot CHAR, VARCHAR of TEXT.

Om te citeren van Microsoft:

Voorvoegsel Unicode-tekenreeksconstanten met de letter N. Zonder
het N-voorvoegsel, wordt de tekenreeks geconverteerd naar de standaardcodepagina van de
databank. Deze standaard codepagina herkent bepaalde tekens mogelijk niet.


Als je het verschil tussen deze twee gegevenstypen wilt weten, bekijk dan dit SO-bericht:

Wat is het verschil tussen varchar en nvarchar?


Antwoord 2, autoriteit 6%

Laat me je iets vervelends vertellen dat gebeurde met het voorvoegsel N'– ik kon het twee dagen niet repareren.

Mijn database-sortering is SQL_Latin1_General_CP1_CI_AS.

Het heeft een tabel met een kolom genaamd MyCol1. Het is een Nvarchar

Deze zoekopdracht komt niet overeen met de Exactewaarde die bestaat.

SELECT TOP 1 * FROM myTable1 WHERE  MyCol1 = 'ESKİ'  
// 0 result

het gebruik van voorvoegsel N” lost het op

SELECT TOP 1 * FROM myTable1 WHERE  MyCol1 = N'ESKİ'  
// 1 result - found!!!!

Waarom? Omdat latin1_general geen grote gestippelde İheeft, is het daarom denk ik mislukt.


Antwoord 3, autoriteit 2%

1. Prestaties:

Stel dat je waar-clausule als volgt is:

WHERE NAME='JON'

Als de kolom NAME van een ander type is dan nvarchar of nchar, moet u het N-voorvoegsel niet opgeven. Als de kolom NAAM echter van het type nvarchar of nchar is en u het N-voorvoegsel niet opgeeft, wordt ‘JON’ behandeld als niet-unicode. Dit betekent dat het gegevenstype van de NAME-kolom en de tekenreeks ‘JON’ verschillend zijn en dat SQL Server dus impliciet het ene operandtype naar het andere converteert. Als de SQL Server het letterlijke type converteert
naar het type van de kolom, dan is er geen probleem, maar als het andersom is, zullen de prestaties worden aangetast omdat de index van de kolom (indien beschikbaar) niet zal worden gebruikt.

2. Tekenset:

Als de kolom van type NVARCHAR of NCHAR is, gebruik dan altijd het voorvoegsel N terwijl u de tekenreeks opgeeft in de where Criteria / Update / Insert-clausule. Als u dit niet doet en een van de personages in uw string is Unicode (zoals internationale tekens – voorbeeld – ā), zal het mislukken of de gegevenscorruptie lijden.


Antwoord 4

Aangenomen van de waarde is NVARCHAR-type voor dat alleen wij gebruiken N ”

Other episodes