Programação do lado do servidor com Unicode

Realizar o reconhecimento Unicode de um banco de dados envolve a definição de interações do cliente nesse reconhecimento além do uso dos tipos de dados nchar, nvarchar e nvarchar(max) para definir o armazenamento Unicode. Você pode definir as interações de cliente no reconhecimento Unicode realizando o seguinte no lado do servidor do banco de dados:

  • Alterne dos tipos de dados não-Unicode para tipos de dados Unicode nas colunas da tabela e nas operações CONVERT () e CAST ().

  • Substitua o uso das funções ASCII () e CHAR () por seus equivalentes Unicode, UNICODE () e NCHAR ().

  • Defina as variáveis e os parâmetros dos procedimentos armazenados e dos gatilhos em Unicode.

  • Prefixe as constantes da cadeia de caracteres Unicode com a letra N.

Usando o UNICODE (), NCHAR () e demais funções

A função ASCII() retorna o código de caracteres não-Unicode do caractere passado. Portanto, use a contraparte da função UNICODE() para as cadeias de caracteres Unicode onde você usaria a função ASCII em cadeias de caracteres não-Unicode. O mesmo é verdadeiro para a função CHAR; NCHAR é a sua contraparte Unicode.

Como a função SOUNDEX() é definida com base nas regras fonéticas do idioma inglês, ela não tem nenhum significado nas cadeias de caracteres Unicode, a menos que a cadeia contenha somente os caracteres latinos A até Z e a até z.

ASCII, CHAR e SOUNDEX podem passar parâmetros Unicode, mas esses argumentos são implicitamente convertidos em cadeias de caracteres não-Unicode. Isto poderá causar a possível perda de caracteres Unicode antes do processamento, pois essas funções operam por definição em cadeias de caracteres não-Unicode.

Além das funções UNICODE() e NCHAR(), as funções de manipulação de cadeias de caracteres a seguir têm suporte Unicode onde possível: CHARINDEX(), LEFT(), LEN(), UPPER(), LOWER(), LTRIM(), RTRIM(), PATINDEX(), REPLACE(), QUOTENAME(), REPLICATE(), REVERSE(), STUFF(), SUBSTRING(), UNICODE(). Essas funções aceitam argumentos Unicode, respeitam os limites de caracteres de 2 bytes das cadeias de caracteres Unicode, e usam as regras de classificação Unicode nas comparações de cadeias quando os parâmetros de entrada forem Unicode.

Definindo os parâmetros nos procedimentos armazenados

Definir os parâmetros com um tipo de dados Unicode garante que os pedidos ou as entradas do cliente sejam implicitamente convertidos em Unicode no servidor e não sejam corrompidos no processo. Se o parâmetro for especificado como um parâmetro OUTPUT, um tipo Unicode também minimiza a oportunidade de corrupção no seu retorno para o cliente.

No procedimento armazenado a seguir, a variável é declarada como um tipo de dados Unicode.

CREATE PROCEDURE Product_Info
    @name nvarchar(40)
AS
SELECT p.ListPrice, v.Name
    FROM Production.Product p 
        INNER JOIN Purchasing.ProductVendor pv
            ON p.ProductID = pv.ProductID  
        INNER JOIN Purchasing.Vendor v
            ON pv.VendorID = v.VendorID
WHERE p.Name = @name;

Usando o prefixo N

As constantes das cadeias de caracteres Unicode que aparecem em código executado no servidor, como nos procedimentos armazenados e nos gatilhos, devem ser precedidas pela letra N em maiúsculo. Isto é verdadeiro mesmo se a coluna sendo referenciada já estiver definida como Unicode. Sem o prefixo N, a cadeia de caracteres é convertida na página de código padrão do banco de dados. Isto pode não reconhecer alguns caracteres.

Por exemplo, o procedimento armazenado criado no exemplo anterior pode ser executado no servidor da seguinte maneira:

EXECUTE Product_Info @name = N'Chain'

O requisito para usar o prefixo N se aplica tanto às constantes de cadeias de caracteres originadas no servidor como àquelas enviadas do cliente.

Consulte também

Conceitos