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?
fuente
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?
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.
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.
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:
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)
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