¿Qué caracteres se permiten en la columna (nvarchar 50) de MSSQL Server 2008?

0

Tengo una columna en MSSQL que es nvarchar (50) en la que introduzco contraseñas para los usuarios. Sé que, por ejemplo, se permiten algunos caracteres especiales como $%, pero ¿dónde veo qué lista de caracteres están permitidos?

RayofCommand
fuente

Respuestas:

1

nchar / nvarchar son los tipos de datos del juego de caracteres UNICODE UCS-2 de longitud fija y flexible de SQL Server.

La pregunta entonces es, ¿qué diablos es UCS-2? Y de acuerdo a wikipedia , va a permitir puntos de código 1.1M.

Lo siguiente se ha copiado del artículo de la wiki, ya que soy un tonto y me he esforzado por entender qué significa todo esto.

Codifique los puntos U + 0000 a U + D7FF y U + E000 a U + FFFF

El primer plano (puntos de código U + 0000 a U + FFFF) contiene los caracteres más utilizados y se denomina Plano Multilingüe Básico o BMP. Tanto UTF-16 como UCS-2 codifican puntos de código en este rango como unidades de código de 16 bits individuales que son numéricamente iguales a los puntos de código correspondientes. Los puntos de código en el BMP son los únicos puntos de código que se pueden representar en UCS-2. Dentro de este plano, los puntos de código U + D800 a U + DFFF (ver más abajo) están reservados para los sustitutos de plomo y rastro.

Puntos de código U + 10000 a U + 10FFFF

Los puntos de código de los otros planos (llamados Planos suplementarios) están codificados en UTF-16 por pares de unidades de código de 16 bits llamadas pares sustitutos, por el siguiente esquema:

  • 0x010000 se resta del punto de código, dejando un número de 20 bits en el rango de 0..0x0FFFFF.
  • Los diez bits superiores (un número en el rango 0..0x03FF) se agregan a 0xD800 para dar la primera unidad de código o sustituto principal, que estará en el rango 0xD800..0xDBFF. (Las versiones anteriores del estándar de Unicode se refieren a estos como sustitutos altos).
  • Los diez bits bajos (también en el rango 0..0x03FF) se agregan a 0xDC00 para dar la segunda unidad de código o sustituto de camino, que estará en el rango 0xDC00..0xDFFF. (Las versiones anteriores de Unicode Standard se refieren a estos como sustitutos bajos).

Dado que los rangos de los sustitutos principales, los sustitutos de camino y los caracteres BMP válidos están separados, las búsquedas se simplifican: no es posible que parte de un carácter coincida con una parte diferente de otro carácter. También significa que UTF-16 se sincroniza automáticamente en palabras de 16 bits: si una unidad de código comienza, se puede determinar un carácter sin examinar las unidades de código anteriores. UTF-8 comparte estas ventajas, pero muchos esquemas de codificación de múltiples bytes anteriores no permitían una búsqueda inequívoca y solo podían sincronizarse volviendo a analizar desde el principio de la cadena. UTF-16 no se sincroniza automáticamente si se pierde un byte o si el recorrido comienza en un byte aleatorio.

Debido a que los caracteres más utilizados son todos en el Plano Multilingüe Básico, el manejo de pares sustitutos a menudo no se prueba a fondo. Esto conduce a errores persistentes y posibles agujeros de seguridad, incluso en software de aplicación popular y bien revisado (por ejemplo, CVE-2008-2938, CVE-2012-2135)

billinkc
fuente
1

NVARCHAR puede tener caracteres Unicode. http://msdn.microsoft.com/en-us/library/ms186939.aspx

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

DECLARE @nv NVARCHAR(20)
SET @nv = N'Minyā'
SELECT @nv

Aquí está la lista de personajes de Unicode: http://en.wikipedia.org/wiki/List_of_Unicode_characters

Suing
fuente