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

SE APLICA A: síSQL Server (a partir de 2008) síAzure SQL Database síAzure SQL Data Warehouse síAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Los tipos de datos de caracteres son de longitud fija, char, o de longitud variable, varchar.Character data types that are either fixed-length, char, or variable-length, varchar. A partir de Vista previa de SQL Server 2019SQL Server 2019 preview, cuando se usa una intercalación con UTF-8 habilitado, estos tipos de datos almacenan el intervalo completo de datos de caracteres Unicode y usan la codificación de caracteres UTF-8.Starting with Vista previa de SQL Server 2019SQL Server 2019 preview, when a UTF-8 enabled collation is used, these data types store the full range of Unicode character data and use the UTF-8 character encoding. Si se especifica una intercalación cuyo formato no es UTF-8, estos tipos de datos solo almacenan un subconjunto de caracteres admitidos por la página de códigos correspondiente de esa intercalación.If a non-UTF-8 collation is specified, then these data types store only a subset of characters supported by the corresponding code page of that collation.

ArgumentosArguments

char [ ( n ) ] Datos de cadena de longitud fija.char [ ( n ) ] Fixed-length string data. n define la longitud de la cadena en bytes y debe ser un valor entre 1 y 8000.n defines the string length in bytes and must be a value from 1 through 8,000. Para juegos de caracteres de codificación de byte único, como el latino, el tamaño de almacenamiento es n bytes y el número de caracteres que se pueden almacenar también es n.For single-byte encoding character sets such as Latin, the storage size is n bytes and the number of characters that can be stored is also n. Para los juegos de caracteres de codificación multibyte, el tamaño de almacenamiento sigue siendo n bytes, pero el número de caracteres que se pueden almacenar puede ser menor que n.For multibyte encoding character sets, the storage size is still n bytes but the number of characters that can be stored may be smaller than n. El sinónimo ISO para char es character.The ISO synonym for char is character. Para más información sobre los juegos de caracteres, vea Juegos de caracteres de un solo byte y de varios bytes.For more information on character sets, see Single-Byte and Multibyte Character Sets.

varchar [ ( n | max ) ] Datos de cadena de longitud variable.varchar [ ( n | max ) ] Variable-length string data. n define la longitud de la cadena en bytes y puede ser un valor entre 1 y 8000.n defines the string length in bytes and can be a value from 1 through 8,000. max indica que el tamaño máximo de almacenamiento es de 2^31-1 bytes (2 GB).max indicates that the maximum storage size is 2^31-1 bytes (2 GB). Para juegos de caracteres de codificación de byte único, como el latino, el tamaño de almacenamiento es n bytes + 2 bytes y el número de caracteres que se pueden almacenar también es n.For single-byte encoding character sets such as Latin, the storage size is n bytes + 2 bytes and the number of characters that can be stored is also n. Para los juegos de caracteres de codificación multibyte, el tamaño de almacenamiento sigue siendo n bytes + 2 bytes, pero el número de caracteres que se pueden almacenar puede ser menor que n.For multibyte encoding character sets, the storage size is still n bytes + 2 bytes but the number of characters that can be stored may be smaller than n. Los sinónimos ISO para varchar son charvarying o charactervarying.The ISO synonyms for varchar are charvarying or charactervarying. Para más información sobre los juegos de caracteres, vea Juegos de caracteres de un solo byte y de varios bytes.For more information on character sets, see Single-Byte and Multibyte Character Sets.

NotasRemarks

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

Los objetos que utilizan char o varchar se asignan a la intercalación predeterminada de la base de datos, a menos que se asigne una intercalación específica por medio de 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.

Las codificaciones multibyte de SQL ServerSQL Server incluyen:Multibyte encodings in SQL ServerSQL Server include:

  • Juegos de caracteres de doble byte (DBCS) para algunos lenguajes asiáticos orientales que usan páginas de códigos 936 y 950 (chino), 932 (japonés) o 949 (coreano).Double-byte character sets (DBCS) for some East Asian languages using code pages 936 and 950 (Chinese), 932 (Japanese), or 949 (Korean).
  • UTF-8 con página de códigos 65001.UTF-8 with code page 65001. Se aplica a: SQL ServerSQL Server (a partir de Vista previa de SQL Server 2019SQL Server 2019 preview))Applies to: SQL ServerSQL Server (Starting with Vista previa de SQL Server 2019SQL Server 2019 preview))

Si tiene sitios que admiten varios idiomas:If you have sites that support multiple languages:

  • A partir de Vista previa de SQL Server 2019SQL Server 2019 preview, considere el uso de una intercalación con UTF-8 habilitado para admitir Unicode y minimizar los problemas de conversión de caracteres.Starting with Vista previa de SQL Server 2019SQL Server 2019 preview, consider using a UTF-8 enabled collation to support Unicode and minimize character conversion issues.
  • Si usa una versión anterior de Motor de base de datos de SQL ServerSQL Server Database Engine, considere la posibilidad de usar tipos de datos Unicode nchar o nvarchar para minimizar los problemas de conversión de caracteres.If using a lower version of the Motor de base de datos de SQL ServerSQL Server Database Engine, consider using the Unicode nchar or nvarchar data types to minimize character conversion issues.

Si usa char o varchar, se recomienda:If you use char or varchar, we recommend to:

  • Utilice char cuando los tamaños de las entradas de datos de columna sean 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.
  • Utilice varchar(max) cuando los tamaños de las entradas de datos de columna varíen de forma considerable y la longitud de la cadena pueda superar los 8000 bytes.Use varchar(max) when the sizes of the column data entries vary considerably, and the string length might exceed 8,000 bytes.

Si SET ANSI_PADDING es OFF cuando se ejecuta CREATE TABLE o ALTER TABLE, una columna de tipo char definida como NULL se trata como si fuera de tipo 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.

Advertencia

Cada columna varchar(max) o nvarchar(max) cuyo valor no sea NULL requiere 24 bytes de asignación fija adicional que se descuentan del límite de 8060 bytes de las 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 del número de columnas varchar(max) o varchar(max) cuyo valor no sea NULL que es posible crear en una tabla.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 8,060 bytes) or at the time of data insertion. Este tamaño grande de fila puede provocar errores (como el error 512) durante algunas operaciones normales, como la actualización de claves de un índice agrupado o las 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 can anticipate until performing an operation.

Convertir datos de caracteresConverting 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 tipo uniqueidentifier se considera un tipo de carácter para la conversión de una expresión de caracteres y, por tanto, está sujeto a las reglas de truncamiento de la conversión a un tipo de carácter.The uniqueidentifier type is considered a character type for the purposes of conversion from a character expression, and so 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 a una expresión de caracteres de un tipo de datos o tamaño distinto (como de char(5) a varchar(5) o de char(20) a char(15)), se asigna la intercalación del valor de entrada al 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 cualquiera de los casos, puede asignar una intercalación específica mediante la cláusula COLLATE.In either case, you can assign a specific collation by using the COLLATE clause.

Nota

Las traducciones de páginas de códigos se admiten para los tipos de datos char y varchar, pero no para el tipo de datos text.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 páginas de códigos no se notifican.As with earlier versions of SQL ServerSQL Server, data loss during code page translations isn't reported.

Las expresiones de caracteres que se van a convertir a un tipo de datos numeric aproximado pueden incluir una notación exponencial opcional.Character expressions that are being converted to an approximate numeric data type can include optional exponential notation. Esta notación es una e minúscula o una E mayúscula seguida de un signo opcional más (+) o menos (-) y un número.This notation is a lowercase e or uppercase E followed by an optional plus (+) or minus (-) sign and then a number.

Las expresiones de carácter que se convierten a un tipo de datos numeric exacto se componen de dígitos, un separador decimal y un signo más (+) o menos (-) opcional.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, aren't allowed in the string.

Las expresiones de caracteres que se convierten a los tipos de datos money o smallmoney pueden incluir también un separador decimal opcional y un símbolo 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 que el valor predeterminado de n es 1 para los tipos de datos char y varchar cuando se usan en una 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 se usa el tipo de datos char o varchar con las funciones CAST y CONVERT.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. Un tipo money 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. Un tipo datetime se convierte en datos de caracteres y se aplica el estilo 3, que muestra los datos en el formato dd/mm/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, un tipo money se convierte en un tipo de caracteres 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. Como el tipo uniqueidentifier tiene un límite de 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 datos Estimate the Size of a Database
Compatibilidad con la intercalación y Unicode Collation and Unicode Support
Juegos de caracteres de un solo byte y de varios bytesSingle-Byte and Multibyte Character Sets