Programación en el servidor con Unicode

Para que una base de datos reconozca Unicode, deben definirse interacciones de cliente que reconozcan Unicode, además de utilizar los tipos de datos nchar, nvarchar y nvarchar(max) para definir el almacenamiento Unicode. Puede definir interacciones de cliente que reconozcan Unicode si realiza las siguientes acciones en el servidor de la base de datos:

  • Cambiar de tipos de datos no Unicode a tipos de datos Unicode en las columnas de tablas y en las operaciones CONVERT() y CAST().

  • Sustituir el uso de las funciones ASCII() y CHAR() por sus equivalentes Unicode, UNICODE() y NCHAR().

  • Definir variables y parámetros de procedimientos almacenados y desencadenadores en Unicode.

  • Agregar el prefijo N a las constantes de cadenas de caracteres Unicode.

Usar UNICODE(), NCHAR() y otras funciones

La función ASCII() devuelve el código no Unicode del carácter enviado. Por tanto, debe utilizar la función UNICODE() para las cadenas Unicode en los casos en que utilizaría la función ASCII para cadenas no Unicode. Lo mismo sucede con la función CHAR; NCHAR es el equivalente para Unicode.

La función SOUNDEX() se define basándose en las reglas fonéticas inglesas, por lo que no resulta significativa en cadenas Unicode, excepto si la cadena contiene únicamente caracteres latinos de la "A" a la "Z" y de la "a" a la "z".

ASCII, CHAR y SOUNDEX se pueden enviar como parámetros Unicode, pero estos argumentos se convierten de forma implícita a cadenas no Unicode. Esto podría provocar la pérdida de caracteres Unicode antes del proceso, ya que, por definición, estas funciones actúan en cadenas no Unicode.

Además de las funciones UNICODE() y NCHAR(), las siguientes funciones de manipulación de cadenas admiten Unicode si es posible: CHARINDEX(), LEFT(), LEN(), UPPER(), LOWER(), LTRIM(), RTRIM(), PATINDEX(), REPLACE(), QUOTENAME(), REPLICATE(), REVERSE(), STUFF(), SUBSTRING(), UNICODE(). Estas funciones aceptan argumentos Unicode, respetan los límites de carácter de 2 bytes de las cadenas Unicode y utilizan las reglas de ordenación Unicode en las comparaciones de cadenas cuando los parámetros de entrada son Unicode.

Definir parámetros en procedimientos almacenados

La definición de parámetros con un tipo de datos Unicode garantiza que la entrada o las solicitudes del cliente se convierten de forma implícita a Unicode en el servidor y no se dañan en el proceso. Si el parámetro se especifica como un parámetro OUTPUT, los tipos Unicode también reducen la posibilidad de daños en su retorno al cliente.

En el siguiente procedimiento almacenado, la variable se declara como un tipo de datos 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;

Usar el prefijo N

Las constantes de cadena Unicode que aparecen en código ejecutado en el servidor, como en el caso de los procedimientos almacenados y los desencadenadores, deben utilizar la letra mayúscula N como prefijo. Esto debe ser así aunque la columna a la que se haga referencia se haya definido como Unicode. Sin el prefijo N, la cadena se convierte a la página de códigos predeterminada de la base de datos. De esta forma, es posible que no se reconozcan algunos caracteres.

Por ejemplo, el procedimiento almacenado creado en el ejemplo anterior se puede ejecutar en el servidor de la manera siguiente:

EXECUTE Product_Info @name = N'Chain'

El requisito de utilización del prefijo N se aplica tanto a las constantes de cadena que se generan en el servidor como a las que se envían desde el cliente.

Vea también

Conceptos