¿Cuál es el significado del prefijo N en las declaraciones T-SQL y cuándo debo usarlo?

Resuelto Kartik Patel asked hace 12 años • 4 respuestas

He visto el prefijo N en algunas consultas de inserción T-SQL. Mucha gente lo ha utilizado Nantes de insertar el valor en una tabla.

Busqué, pero no pude entender cuál es el propósito de incluir Nantes de insertar cadenas en la tabla.

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

¿Para qué sirve este prefijo 'N' y cuándo debe usarse?

Kartik Patel avatar Apr 05 '12 15:04 Kartik Patel
Aceptado

Está declarando la cadena como nvarchartipo de datos, en lugar devarchar

Es posible que haya visto código Transact-SQL que pasa cadenas usando un prefijo N. Esto indica que la cadena siguiente está en Unicode (la N en realidad significa conjunto de caracteres del idioma nacional). Lo que significa que estás pasando un valor NCHAR, NVARCHAR o NTEXT, a diferencia de CHAR, VARCHAR o TEXT.

Para citar de Microsoft :

Prefije las constantes de cadena de caracteres Unicode con la letra N. Sin el prefijo N, la cadena se convierte a la página de códigos predeterminada de la base de datos. Es posible que esta página de códigos predeterminada no reconozca ciertos caracteres .


Si desea conocer la diferencia entre estos dos tipos de datos, consulte esta publicación SO:

¿Cuál es la diferencia entre varchar y nvarchar?

Curtis avatar Apr 05 '2012 08:04 Curtis

Déjame contarte algo molesto que sucedió con el N'prefijo: no pude solucionarlo durante dos días.

La clasificación de mi base de datos es SQL_Latin1_General_CP1_CI_AS .

Tiene una tabla con una columna llamada MyCol1 . es un nvarchar

Esta consulta no coincide con el valor exacto que existe.

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

// 0 result

usando el prefijo N'' lo soluciona

SELECT TOP 1 * FROM myTable1 WHERE  MyCol1 = N'ESKİ'  

// 1 result - found!!!!

¿Por qué? Debido a que latin1_general no tiene puntos grandes, supongo que por eso falla.

bh_earth0 avatar Oct 24 '2017 09:10 bh_earth0