char y varchar (Transact-SQL)char and varchar (Transact-SQL)

ESTE TEMA SE APLICA A: síSQL Server (a partir de 2008)síAzure SQL DatabasesíAzure SQL Data Warehouse síAlmacenamiento de datos paralelos THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Estos tipos de datos son de longitud fija o de longitud variable.These data types are of either fixed length or variable length.

ArgumentosArguments

char [( n )] longitud fija, datos de cadena no Unicode.char [ ( n ) ] Fixed-length, non-Unicode string data. ndefine la longitud de cadena y debe ser un valor entre 1 y 8.000.n defines the string length and must be a value from 1 through 8,000. El tamaño de almacenamiento es n bytes.The storage size is n bytes. El sinónimo ISO para char es caracteres.The ISO synonym for char is character.

varchar [( n | max )] longitud Variable, datos de cadena no Unicode.varchar [ ( n | max ) ] Variable-length, non-Unicode string data. ndefine la longitud de cadena y puede ser un valor entre 1 y 8.000.n defines the string length and can be a value from 1 through 8,000. max indica que el tamaño máximo de almacenamiento es 2 ^ 31-1 bytes (2 GB).max indicates that the maximum storage size is 2^31-1 bytes (2 GB). El tamaño de almacenamiento es la longitud real de los datos especificados + 2 bytes.The storage size is the actual length of the data entered + 2 bytes. Los sinónimos ISO de varchar son charvarying o charactervarying.The ISO synonyms for varchar are charvarying or charactervarying.

ComentariosRemarks

Cuando n no se especifica en una definición de datos o la instrucción de declaración de variable, la longitud predeterminada es 1.When n is not specified in a data definition or variable declaration statement, the default length is 1. Cuando n no se especifica al utilizar las funciones CAST y CONVERT, la longitud predeterminada es 30.When n is not specified when using the CAST and CONVERT functions, the default length is 30.

Objetos que utilizan char o varchar se asigna la intercalación predeterminada de la base de datos, a menos que se asigne una intercalación específica mediante la cláusula COLLATE.Objects that use char or varchar are assigned the default collation of the database, unless a specific collation is assigned using the COLLATE clause. La intercalación controla la página de códigos utilizada para almacenar los datos de caracteres.The collation controls the code page that is used to store the character data.

Si tiene sitios que admiten varios idiomas, considere el uso de Unicode nchar o nvarchar tipos de datos para minimizar los problemas de conversión de caracteres.If you have sites that support multiple languages, consider using the Unicode nchar or nvarchar data types to minimize character conversion issues. Si usa char o varchar, se recomienda lo siguiente:If you use char or varchar, we recommend the following:

  • Use char cuando los tamaños de las entradas de datos de columna son coherentes.Use char when the sizes of the column data entries are consistent.
  • Use varchar cuando los tamaños de las entradas de datos de columna varíen considerablemente.Use varchar when the sizes of the column data entries vary considerably.
  • Use varchar (max) cuando los tamaños de las entradas de datos de columna varíen considerablemente y el tamaño puede superar los 8.000 bytes.Use varchar(max) when the sizes of the column data entries vary considerably, and the size might exceed 8,000 bytes.

Si SET ANSI_PADDING es OFF cuando se ejecuta CREATE TABLE o ALTER TABLE, un char columna definida como NULL se trata como varchar.If SET ANSI_PADDING is OFF when either CREATE TABLE or ALTER TABLE is executed, a char column that is defined as NULL is handled as varchar.

Cuando la página de códigos de la intercalación utiliza caracteres de doble byte, el tamaño de almacenamiento sigue siendo n bytes.When the collation code page uses double-byte characters, the storage size is still n bytes. Dependiendo de la cadena de caracteres, el tamaño de almacenamiento de n bytes puede ser inferior a n caracteres.Depending on the character string, the storage size of n bytes can be less than n characters.

Advertencia

Cada no null varchar (max) o nvarchar (max) columna requiere 24 bytes de asignación fija adicional que se descuentan del límite de 8.060 bytes de filas durante una operación de ordenación.Each non-null varchar(max) or nvarchar(max) column requires 24 bytes of additional fixed allocation which counts against the 8,060 byte row limit during a sort operation. Esto puede crear un límite implícito en el número de columnas de nvarchar (max) que se pueden crear en una tabla o no null varchar (max).This can create an implicit limit to the number of non-null varchar(max) or nvarchar(max) columns that can be created in a table.
No se produce ningún error especial cuando se crea la tabla (más allá de la advertencia habitual de que el tamaño máximo de la fila supera el máximo permitido de 8060 bytes) ni en el momento de la inserción de los datos.No special error is provided when the table is created (beyond the usual warning that the maximum row size exceeds the allowed maximum of 8060 bytes) or at the time of data insertion. Este tamaño de fila grande puede provocar errores (como el error 512) durante algunas operaciones normales, como una actualización de claves de índices agrupados u ordenaciones del conjunto completo de columnas, que los usuarios no pueden prever hasta que lleven a cabo alguna operación.This large row size can cause errors (such as error 512) during some normal operations, such as a clustered index key update, or sorts of the full column set, which users cannot anticipate until performing an operation.

Convertir datos de caracteres Converting Character Data

Cuando se convierten expresiones de caracteres a un tipo de datos de caracteres de un tamaño distinto, se truncan los valores que son demasiado grandes para el nuevo tipo de datos.When character expressions are converted to a character data type of a different size, values that are too long for the new data type are truncated. El uniqueidentifier tipo se considera un tipo de carácter para los fines de conversión de una expresión de caracteres y, por tanto, está sujeto a las reglas de truncamiento para convertir a un tipo de carácter.The uniqueidentifier type is considered a character type for the purposes of conversion from a character expression, and therefore is subject to the truncation rules for converting to a character type. Vea la sección Ejemplos que aparece más adelante.See the Examples section that follows.

Cuando una expresión de caracteres se convierte en una expresión de caracteres de un tipo de datos diferente o el tamaño, como de char (5) a varchar (5), o char(20) a char (15), se asigna la intercalación del valor de entrada para el valor convertido.When a character expression is converted to a character expression of a different data type or size, such as from char(5) to varchar(5), or char(20) to char(15), the collation of the input value is assigned to the converted value. Si una expresión que no es de carácter se convierte a un tipo de datos de carácter, se asigna al valor convertido la intercalación predeterminada de la base de datos actual.If a noncharacter expression is converted to a character data type, the default collation of the current database is assigned to the converted value. En cualquier caso, puede asignar una intercalación específica mediante la COLLATE cláusula.In either case, you can assign a specific collation by using the COLLATE clause.

Nota

Traducción de página de códigos se admite para char y varchar tipos de datos, pero no para texto tipo de datos.Code page translations are supported for char and varchar data types, but not for text data type. Al igual que en versiones anteriores de SQL ServerSQL Server, las pérdidas de datos durante las conversiones de la página de códigos no se notifican.As with earlier versions of SQL ServerSQL Server, data loss during code page translations is not reported.

Expresiones de carácter que se convierten a un valor aproximado numérico tipo de datos puede incluir una notación exponencial opcional (una e minúscula o E mayúscula seguida de un signo opcional más (+) o menos (-) inicio de sesión y, a continuación, un número).Character expressions that are being converted to an approximate numeric data type can include optional exponential notation (a lowercase e or uppercase E followed by an optional plus (+) or minus (-) sign and then a number).

Expresiones de carácter que se convierten a un exacta numérico tipo de datos puede contener dígitos, un separador decimal y un elemento opcional más (+) o menos (-).Character expressions that are being converted to an exact numeric data type must consist of digits, a decimal point, and an optional plus (+) or minus (-). Los espacios en blanco iniciales se omiten.Leading blanks are ignored. En la cadena no se permiten los separadores de coma (como el separador de miles en algunas representaciones de 123,456.00).Comma separators, such as the thousands separator in 123,456.00, are not allowed in the string.

Carácter que se va a convertir en las expresiones dinero o smallmoney tipos de datos también pueden incluir un punto decimal opcional y un signo de dólar ($).Character expressions being converted to money or smallmoney data types can also include an optional decimal point and dollar sign ($). Los separadores de coma (por ejemplo, $123,456.00) están permitidos.Comma separators, as in $123,456.00, are allowed.

EjemplosExamples

A.A. Mostrar el valor predeterminado de n cuando se usa en una declaración de variable.Showing the default value of n when used in variable declaration.

En el ejemplo siguiente se muestra el valor predeterminado de n es 1 para el char y varchar tipos de datos cuando se utilizan en la declaración de variable.The following example shows the default value of n is 1 for the char and varchar data types when they are used in variable declaration.

DECLARE @myVariable AS varchar = 'abc';  
DECLARE @myNextVariable AS char = 'abc';  
--The following returns 1  
SELECT DATALENGTH(@myVariable), DATALENGTH(@myNextVariable);  
GO  

B.B. Mostrar el valor predeterminado de n cuando varchar se usa con CAST y CONVERT.Showing the default value of n when varchar is used with CAST and CONVERT.

En el ejemplo siguiente se muestra que el valor predeterminado de n es 30 cuando la char o varchar tipos de datos se usan con la CAST y CONVERT funciones.The following example shows that the default value of n is 30 when the char or varchar data types are used with the CAST and CONVERT functions.

DECLARE @myVariable AS varchar(40);  
SET @myVariable = 'This string is longer than thirty characters';  
SELECT CAST(@myVariable AS varchar);  
SELECT DATALENGTH(CAST(@myVariable AS varchar)) AS 'VarcharDefaultLength';  
SELECT CONVERT(char, @myVariable);  
SELECT DATALENGTH(CONVERT(char, @myVariable)) AS 'VarcharDefaultLength';  

C.C. Convertir datos para mostrarlosConverting Data for Display Purposes

En el ejemplo siguiente se convierten dos columnas a tipos de caracteres y se aplica un estilo que aplica un formato concreto a los datos mostrados.The following example converts two columns to character types and applies a style that applies a specific format to the displayed data. A dinero tipo se convierte en datos de caracteres y se aplica el estilo 1, que muestra los valores con comas cada tres dígitos a la izquierda del separador decimal y dos dígitos a la derecha del separador decimal.A money type is converted to character data and style 1 is applied, which displays the values with commas every three digits to the left of the decimal point, and two digits to the right of the decimal point. A datetime tipo se convierte en datos de caracteres y se aplica el estilo 3, que muestra los datos en el formato mm/dd/aa.A datetime type is converted to character data and style 3 is applied, which displays the data in the format dd/mm/yy. En la cláusula WHERE, una dinero tipo se convierte en un tipo de carácter para realizar una operación de comparación de cadenas.In the WHERE clause, a money type is cast to a character type to perform a string comparison operation.

USE AdventureWorks2012;  
GO  
SELECT  BusinessEntityID,   
   SalesYTD,   
   CONVERT (varchar(12),SalesYTD,1) AS MoneyDisplayStyle1,   
   GETDATE() AS CurrentDate,   
   CONVERT(varchar(12), GETDATE(), 3) AS DateDisplayStyle3  
FROM Sales.SalesPerson  
WHERE CAST(SalesYTD AS varchar(20) ) LIKE '1%';  

El conjunto de resultados es el siguiente.Here is the result set.

BusinessEntityID SalesYTD              DisplayFormat CurrentDate             DisplayDateFormat  
---------------- --------------------- ------------- ----------------------- -----------------  
278              1453719.4653          1,453,719.47  2011-05-07 14:29:01.193 07/05/11  
280              1352577.1325          1,352,577.13  2011-05-07 14:29:01.193 07/05/11  
283              1573012.9383          1,573,012.94  2011-05-07 14:29:01.193 07/05/11  
284              1576562.1966          1,576,562.20  2011-05-07 14:29:01.193 07/05/11  
285              172524.4512           172,524.45    2011-05-07 14:29:01.193 07/05/11  
286              1421810.9242          1,421,810.92  2011-05-07 14:29:01.193 07/05/11  
288              1827066.7118          1,827,066.71  2011-05-07 14:29:01.193 07/05/11  

D.D. Convertir datos UniqueidentifierConverting Uniqueidentifer Data

En el ejemplo siguiente se convierte un valor uniqueidentifier a un tipo de datos char.The following example converts a uniqueidentifier value to a char data type.

DECLARE @myid uniqueidentifier = NEWID();  
SELECT CONVERT(char(255), @myid) AS 'char';  

En el ejemplo siguiente se muestra el truncamiento de los datos cuando el valor es demasiado largo para el tipo de datos al que se va a convertir.The following example demonstrates the truncation of data when the value is too long for the data type being converted to. Dado que la uniqueidentifier tipo está limitado a 36 caracteres, se truncan los caracteres que superan esa longitud.Because the uniqueidentifier type is limited to 36 characters, the characters that exceed that length are truncated.

DECLARE @ID nvarchar(max) = N'0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong';  
SELECT @ID, CONVERT(uniqueidentifier, @ID) AS TruncatedValue;  

El conjunto de resultados es el siguiente.Here is the result set.

String                                       TruncatedValue  
-------------------------------------------- ------------------------------------  
0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong    0E984725-C51C-4BF4-9960-E1C80E27ABA0  

(1 row(s) affected)  

Vea tambiénSee also

nchar y nvarchar (Transact-SQL)nchar and nvarchar (Transact-SQL)
CAST y CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)
COLLATE ( Transact-SQL )COLLATE (Transact-SQL)
Conversiones de tipos de datos ( motor de base de datos )Data Type Conversion (Database Engine)
Tipos de datos (Transact-SQL)Data Types (Transact-SQL)
Estimar el tamaño de una base de datosEstimate the Size of a Database