2012-04-05 13 views
243

He visto el prefijo N en algunas consultas de inserción de T-SQL. Muchas personas han usado N antes de insertar el valor en una tabla.¿Cuál es el significado del prefijo N en las sentencias T-SQL?

He buscado, pero no pude entender cuál es el propósito de incluir el N antes de insertar cualquier cadena en la tabla.

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

Respuesta

300

Es declarando la cadena como tipo de datos nvarchar, en lugar de varchar

Es posible que haya visto el código de Transact-SQL que pasa alrededor de cadenas utilizando un prefijo N . Esto denota que la secuencia siguiente está en Unicode (la N en realidad representa el conjunto de caracteres de idioma nacional). Que significa que está pasando un valor NCHAR, NVARCHAR o NTEXT, como opuesto a CHAR, VARCHAR o TEXT.

Para citar from Microsoft:

Prefijo Unicode constantes de cadena de caracteres 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 . Esta página de códigos predeterminada puede no reconocer ciertos caracteres.


Si desea saber la diferencia entre estos dos tipos de datos, ver este SO mensaje:

What is the difference between varchar and nvarchar?

+1

@Curt eso significa que debo usar 'N' solo cuando estoy usando los siguientes tipos de datos' CHAR, VARCHAR o TEXT' ?? porque 'NCHAR, NVARCHAR o NTEXT' son inherentemente store UNICODE no necesito agregarlo por separado .... ¿es cierto? – Pritesh

+0

@Pritesh: solo si está utilizando una página de códigos predeterminada que puede no reconocer esos caracteres unicode como en el texto en negrita de arriba. – Todd

+4

@Curt El enlace a 'databases aspfaq com' redirige a sitios web extremadamente dudosos (' fkref com', 'za1 zeroredirect1 com',' i0z13 trackvoluum com'), que han sido marcados por nuestro firewall corporativo como pornografía, sitios maliciosos y spam URLs Me puse en contacto con el propietario de aspfaq.com y edité la respuesta para eliminar el enlace. – jaume

4

Suponiendo que el valor es de tipo nvarchar para que sólo estamos usando N' '

4

déjame decirte qué cosa tan molesta pasó con el prefijo N' '. y no pude arreglar 2 días.

Mi recopilación de db es SQL_Latin1_General_CP1_CI_AS.

hay una mesa. columna MyCol1 es Nvarchar

pero esta consulta no coincide exacta Valor que existen.

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

// 0 result 

utilizando el prefijo N '' arregla

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

// 1 result - found!!!! 

por qué? porque latin1_general no tiene con puntos grandes © por eso falla, supongo.

Cuestiones relacionadas