Prefijo N antes de la cadena en la consulta Transact-SQL


41

¿Me diría, por favor, cuándo debo usar el prefijo N antes de la cadena en la consulta Transact-SQL? He comenzado a trabajar con una base de datos donde no obtengo ningún resultado usando una consulta como esta

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

hasta que cambie el patrón a N'%а_pattern%'. Nunca tuve que agregar este prefijo en el pasado, así que tengo curiosidad. a_fieldse define como nvarchar(255), pero creo que la razón es otra cosa.

Respuestas:


31

Los siguientes artículos tienen buena información sobre la pregunta. La respuesta corta es que hay una falta de coincidencia de tipos entre la columna Unicode y el literal de cadena no Unicode que está utilizando. Según el artículo de KB, parece que omitir el prefijo N todavía podría funcionar en algunos casos, pero dependería de la página de códigos y la configuración de intercalación de la base de datos. Eso podría explicar el cambio en el comportamiento, si anteriormente estaba teniendo éxito con el método sin prefijo.

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


6

Esto denota que la cadena posterior está en Unicode (la N en realidad significa juego de caracteres del idioma nacional). Lo que significa que está pasando un valor NCHAR, NVARCHAR o NTEXT, en lugar de CHAR, VARCHAR o TEXT. Vea el Artículo # 2354 para una comparación de estos tipos de datos.

Unicode se usa típicamente en aplicaciones de bases de datos que están diseñadas para facilitar páginas de códigos que se extienden más allá de las páginas de códigos en inglés y de Europa occidental, por ejemplo, chino. Unicode está diseñado para que los juegos de caracteres extendidos puedan "encajar" en las columnas de la base de datos.


3

Creo que el prefijo N le dice al servidor sql que trate la cadena como un valor unicode. Las columnas nvarchar son unicode, por lo que debe usar esta sintaxis al acceder a estas columnas.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.