Quais caracteres são permitidos na coluna (nvarchar 50) do MSSQL Server 2008?

0

Eu tenho uma coluna no MSSQL que é nvarchar (50) na qual eu insiro senhas para usuários. Eu sei que, por exemplo, alguns caracteres especiais como $% são permitidos, mas onde eu vejo quais caracteres da lista são permitidos?

    
por RayofCommand 05.02.2014 / 13:55

2 respostas

1

nchar / nvarchar são dados do conjunto de caracteres UNICODE UCS-2 de comprimento fixo e flexível do SQL Server tipos.

A questão torna-se então, o que diabos é UCS-2? E de acordo com a wikipedia , ele permitirá 1.1 pontos de código.

O seguinte foi copiado do artigo da wiki como eu sou um 'merican' burro e eu tentei entender o que isso tudo significa.

Pontos de código U + 0000 até U + D7FF e U + E000 até U + FFFF

O primeiro plano (pontos de código U + 0000 a U + FFFF) contém os caracteres mais usados e é chamado de Basic Multilingual Plane ou BMP. Tanto o UTF-16 quanto o UCS-2 codificam pontos de código nessa faixa como unidades de código de 16 bits que são numericamente iguais aos pontos de código correspondentes. Os pontos de código no BMP são os únicos pontos de código que podem ser representados no UCS-2. Dentro deste plano, os pontos de código U + D800 a U + DFFF (veja abaixo) são reservados para substitutos de chumbo e trilha.

Pontos de código U + 10000 para U + 10FFFF

Pontos de código dos outros planos (chamados de Planos Suplementares) são codificados em UTF-16 por pares de unidades de código de 16 bits chamados pares substitutos, pelo seguinte esquema:

  • 0x010000 é subtraído do ponto de código, deixando um número de 20 bits no intervalo 0..0x0FFFFF.
  • Os dez principais bits (um número no intervalo 0..0x03FF) são adicionados a 0xD800 para fornecer a primeira unidade de código ou substituto de lead, que estará no intervalo 0xD800..0xDBFF. (Versões anteriores do padrão Unicode se referiam a elas como substitutos altos).
  • Os 10 bits mais baixos (também no intervalo 0..0x03FF) são adicionados a 0xDC00 para fornecer a segunda unidade de código ou substituto de trilha, que estará no intervalo 0xDC00..0xDFFF. (Versões anteriores do padrão Unicode se referiam a elas como substitutos baixos).

Como os intervalos para os substitutos de lead, substitutos de trilha e caracteres BMP válidos são separados, as pesquisas são simplificadas: não é possível que parte de um caractere corresponda a uma parte diferente de outro caractere. Isso também significa que o UTF-16 é auto-sincronizado em palavras de 16 bits: se uma unidade de código inicia um caractere pode ser determinado sem examinar unidades de código anteriores. O UTF-8 compartilha essas vantagens, mas muitos esquemas de codificação de vários bytes anteriores não permitiam a busca sem ambigüidade e só podiam ser sincronizados pela nova análise do início da string. O UTF-16 não é auto-sincronizado se um byte for perdido ou se o percurso começar em um byte aleatório.

Como os caracteres mais comumente usados estão todos no Plano Multilíngue Básico, o manuseio de pares substitutos muitas vezes não é totalmente testado. Isso leva a bugs persistentes e possíveis falhas de segurança, mesmo em softwares de aplicativos populares e bem revisados (por exemplo, CVE-2008-2938, CVE-2012-2135)

    
por 07.02.2014 / 19:10
1

NVARCHAR pode ter caracteres Unicode. link

Prefix Unicode character string constants with the letter N. Without the N prefix, the string is converted to the default code page of the database. This default code page may not recognize certain characters.

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

Aqui está a lista de caracteres Unicode: link

    
por 31.07.2014 / 06:42