Cuando se convierten datos de un tipo de datos de cadena (char, varchar, nchar, nvarchar, binary, varbinary, text, ntext o image) a un tipo de datos binary o varbinary de diferente longitud, SQL Server rellena o trunca los datos de la derecha.
Cuando se convierten a binary o varbinary otros tipos de datos, los datos se rellenan o se truncan por la izquierda. El relleno se realiza con ceros hexadecimales.
La conversión de datos a tipos de datos binary y varbinary es útil si el dato binary es la forma más sencilla de mover datos.
Cuando se convierte un valor de cualquier tipo a un valor binario de tamaño suficiente y, a continuación, se convierte de nuevo al tipo original, el resultado será el mismo valor si ambas conversiones utilizan la misma versión de SQL Server. La representación binaria de un valor puede cambiar entre versiones de SQL Server.
Puede convertir tipos de datos int, smallint y tinyint a binary o varbinary, pero si convierte de nuevo el valor binary a un valor entero, este será distinto del valor entero original si se ha producido un truncamiento.
Por ejemplo, la siguiente instrucción SELECT muestra que el valor entero 123456 se almacena normalmente como un valor 0x0001e240 binario:
SELECT CAST( 123456 AS BINARY(4) );
Sin embargo, en la siguiente instrucción SELECT se muestra que, si el destino de tipo binary es demasiado pequeño para contener el valor completo, los dígitos a la izquierda se truncarán sin avisar; de esta forma, el mismo número se almacena como 0xe240:
SELECT CAST( 123456 AS BINARY(2) );
El siguiente lote muestra que este truncamiento puede afectar a las operaciones aritméticas sin generar un error:
DECLARE @BinaryVariable2 BINARY(2);
SET @BinaryVariable2 = 123456;
SET @BinaryVariable2 = @BinaryVariable2 + 1;
SELECT CAST( @BinaryVariable2 AS INT);
GO
El resultado final es 57921 y no 123457.
Nota |
|---|
No se garantiza que las conversiones entre cualquier tipo de datos y los tipos de datos binary sean las mismas entre diferentes versiones de SQL Server. |