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

GILT FÜR: jaSQL Server (ab 2008) jaAzure SQL-DatenbankjaAzure SQL Data Warehouse jaParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Dieser Artikel beschreibt Zeichendatentypen, die entweder über eine feste Länge – char – oder über eine variable Länge – varchar – verfügen.Character data types that are either fixed-length, char, or variable-length, varchar. Ab Vorschauversion von SQL Server 2019SQL Server 2019 preview gilt Folgendes: Wenn eine Sortierung mit aktiviertem UTF-8 verwendet wird, speichern diese Datentypen den gesamten Bereich der Unicodezeichendaten und verwenden die Zeichencodierung UTF-8.Starting with Vorschauversion von 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. Wenn eine Sortierung ohne aktivierte UTF-8 angegeben wird, speichern diese Datentypen nur eine Teilmenge von Zeichen, die von der entsprechenden Codepage dieser Sortierung unterstützt wird.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.

ArgumenteArguments

char [ ( n ) ]: Zeichenfolgendaten mit fester Länge.char [ ( n ) ] Fixed-length string data. n definiert die Zeichenfolgenlänge in Byte und muss ein Wert zwischen 1 bis 8.000 sein.n defines the string length in bytes and must be a value from 1 through 8,000. Für Einzelbyte-Codierungszeichensätze wie Latein beträgt die Speichergröße n Byte, und die Anzahl von Zeichen, die gespeichert werden können, ist ebenfalls 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. Für Multibyte-Codierungszeichensätze beträgt die Speichergröße noch n Byte, aber die Anzahl von Zeichen, die gespeichert werden können, ist ggf. kleiner als 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. Das ISO-Synonym für char lautet character.The ISO synonym for char is character. Weitere Informationen zu Zeichensätzen finden Sie unter Einzelbyte- und Mehrbyte-Zeichensätze.For more information on character sets, see Single-Byte and Multibyte Character Sets.

varchar [ ( n | max ) ]: Zeichenfolgendaten mit variabler Länge.varchar [ ( n | max ) ] Variable-length string data. n definiert die Zeichenfolgenlänge in Byte und ist ein Wert zwischen 1 bis 8.000.n defines the string length in bytes and can be a value from 1 through 8,000. max gibt an, dass die maximale Speichergröße 2^31-1 Byte (2 GB) beträgt.max indicates that the maximum storage size is 2^31-1 bytes (2 GB). Für Einzelbyte-Codierungszeichensätze wie Latein beträgt die Speichergröße n Byte + 2 Byte, und die Anzahl von Zeichen, die gespeichert werden können, ist ebenfalls 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. Für Multibyte-Codierungszeichensätze beträgt die Speichergröße noch n Byte + 2 Byte, aber die Anzahl von Zeichen, die gespeichert werden können, ist ggf. kleiner als 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. Die ISO-Synonyme für varchar lauten charvarying oder charactervarying.The ISO synonyms for varchar are charvarying or charactervarying. Weitere Informationen zu Zeichensätzen finden Sie unter Einzelbyte- und Mehrbyte-Zeichensätze.For more information on character sets, see Single-Byte and Multibyte Character Sets.

RemarksRemarks

Wenn n in einer Datendefinitions- oder Variablendeklarationsanweisung nicht angegeben ist, beträgt die Standardlänge 1.When n isn't specified in a data definition or variable declaration statement, the default length is 1. Wenn n bei Verwendung der CAST- und CONVERT-Funktionen nicht angegeben ist, beträgt die Standardlänge 30.If n isn't specified when using the CAST and CONVERT functions, the default length is 30.

Objekten, die char oder varchar verwenden, wird die Standardsortierung der Datenbank zugewiesen, es sei denn, mithilfe der COLLATE-Klausel wird eine bestimmte Sortierung zugewiesen.Objects that use char or varchar are assigned the default collation of the database, unless a specific collation is assigned using the COLLATE clause. Die Sortierung bestimmt die Codepage, die zum Speichern der Zeichendaten verwendet wird.The collation controls the code page that is used to store the character data.

Multibyte-Codierungen in SQL ServerSQL Server umfassen:Multibyte encodings in SQL ServerSQL Server include:

  • Doppelbyte-Zeichensätze (DBCS) für einige ostasiatische Sprachen mit Codepages 936 und 950 (Chinesisch), 932 (Japanisch) oder 949 (Koreanisch).Double-byte character sets (DBCS) for some East Asian languages using code pages 936 and 950 (Chinese), 932 (Japanese), or 949 (Korean).
  • UTF-8 mit Codepage 65001.UTF-8 with code page 65001. Gilt für: SQL ServerSQL Server (ab Vorschauversion von SQL Server 2019SQL Server 2019 preview))Applies to: SQL ServerSQL Server (Starting with Vorschauversion von SQL Server 2019SQL Server 2019 preview))

Wenn Sie Websites haben, die mehrere Sprachen unterstützen:If you have sites that support multiple languages:

  • Ab Vorschauversion von SQL Server 2019SQL Server 2019 preview wird eine Sortierung mit aktiviertem UTF-8 empfohlen, um Unicode zu unterstützen und Probleme bei der Zeichenkonvertierung zu vermeiden.Starting with Vorschauversion von SQL Server 2019SQL Server 2019 preview, consider using a UTF-8 enabled collation to support Unicode and minimize character conversion issues.
  • Wenn Sie eine ältere Version von SQL Server-Datenbank-EngineSQL Server Database Engine verwenden, sollten Sie die Unicodedatentypen nchar oder nvarchar verwenden, um Probleme bei der Zeichenkonvertierung zu vermeiden.If using a lower version of the SQL Server-Datenbank-EngineSQL Server Database Engine, consider using the Unicode nchar or nvarchar data types to minimize character conversion issues.

Wenn Sie char oder varchar verwenden, wird Folgendes empfohlen:If you use char or varchar, we recommend to:

  • Verwenden Sie char, wenn die Dateneinträge einer Spalte jeweils gleich lang sind.Use char when the sizes of the column data entries are consistent.
  • Verwenden Sie varchar, wenn sich die Dateneinträge einer Spalte in ihrer Größe erheblich unterscheiden.Use varchar when the sizes of the column data entries vary considerably.
  • Verwenden Sie varchar(max), wenn die Dateneinträge einer Spalte unterschiedlich lang sind, und die Zeichenfolgenlänge 8.000 Byte überschreitet.Use varchar(max) when the sizes of the column data entries vary considerably, and the string length might exceed 8,000 bytes.

Wenn OFF für SET ANSI_PADDING festgelegt ist, während CREATE TABLE oder ALTER TABLE ausgeführt wird, wird eine als NULL definierte Spalte vom Typ char als varchar behandelt.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.

Warnung

Jede varchar(max)- oder nvarchar(max)-Spalte, die ungleich NULL ist, erfordert 24 Byte an zusätzlicher fester Verteilung, die während eines Sortiervorgangs hinsichtlich des Zeilenlimits von 8.060 Byte gelten.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. Dies kann zur Erstellung einer impliziten Beschränkung der Anzahl der varchar(max)- oder nvarchar(max)-Spalten führen, die ungleich NULL sind und in einer Tabelle erstellt werden können.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.
Beim Erstellen der Tabelle (außerhalb der üblichen Warnung darüber, dass die maximale Zeilengröße das zulässige Maximum von 8.060 Byte überschreitet) oder beim Einfügen der Daten wird kein spezieller Fehler ausgegeben.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. Diese große Zeilengröße kann während einiger normaler Vorgänge Fehler (z. B. Fehler 512, Aktualisieren des Schlüssels des gruppierten Indexes oder Sortieren des vollständigen Spaltensatzes) verursachen, die Benutzer bis zum Ausführen eines Vorgangs nur ahnen können.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.

Konvertieren von ZeichendatenConverting Character Data

Werden Zeichenausdrücke in einen Zeichendatentyp mit einer anderen Größe konvertiert, dann werden Werte, die für den neuen Datentyp zu lang sind, abgeschnitten.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. Der uniqueidentifier-Typ wird bei der Konvertierung von Zeichenausdrücken als Zeichentyp behandelt und unterliegt daher den Kürzungsregeln für die Konvertierung in einen Zeichentyp.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. Weitere Informationen finden Sie im Abschnitt "Beispiele" weiter unten.See the Examples section that follows.

Wenn ein Zeichenausdruck in einen Zeichenausdruck eines anderen Datentyps oder einer anderen Größe konvertiert wird (z.B. char(5) in varchar(5) oder char(20) in char(15)), wird die Sortierung des Eingabewerts dem konvertierten Wert zugewiesen.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. Wird ein Nichtzeichenausdruck zu einem Zeichendatentyp konvertiert, wird die Standardsortierung der aktuellen Datenbank dem konvertierten Wert zugewiesen.If a noncharacter expression is converted to a character data type, the default collation of the current database is assigned to the converted value. In beiden Fällen können Sie mithilfe der COLLATE-Klausel auch eine bestimmte Sortierung zuweisen.In either case, you can assign a specific collation by using the COLLATE clause.

Hinweis

Codepageübersetzungen werden für die Datentypen char und varchar, nicht jedoch für den text-Datentyp unterstützt.Code page translations are supported for char and varchar data types, but not for text data type. Wie auch bei früheren Versionen von SQL ServerSQL Server wird der Datenverlust während der Codepageübersetzung nicht gemeldet.As with earlier versions of SQL ServerSQL Server, data loss during code page translations isn't reported.

Zeichenausdrücke, die in einen ungefähren numerischen Datentyp konvertiert werden, können die optionale Exponentialschreibweise enthalten.Character expressions that are being converted to an approximate numeric data type can include optional exponential notation. Diese Schreibweise beginnt mit dem Kleinbuchstaben e oder dem Großbuchstaben E, auf den ein optionales Plus- (+) oder Minuszeichen (-) und dann eine Zahl folgen.This notation is a lowercase e or uppercase E followed by an optional plus (+) or minus (-) sign and then a number.

Zeichenausdrücke, die in einen exakten numerischen Datentyp konvertiert werden, müssen aus Ziffern, einem Dezimaltrennzeichen und einem optionalen Plus- (+) oder Minuszeichen (-) zusammengesetzt sein.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 (-). Führende Leerzeichen werden ignoriert.Leading blanks are ignored. Punkte oder Kommas als Trennzeichen (z. B. als Tausendertrennzeichen in 123.456,00) sind in der Zeichenfolge nicht zulässig.Comma separators, such as the thousands separator in 123,456.00, aren't allowed in the string.

Zeichenausdrücke, die in die Datentypen money oder smallmoney konvertiert werden, können außerdem ein optionales Dezimaltrennzeichen und ein Dollarzeichen ($) enthalten.Character expressions being converted to money or smallmoney data types can also include an optional decimal point and dollar sign ($). Kommas als Trennzeichen (wie in 123.456,00 $) sind zulässig.Comma separators, as in $123,456.00, are allowed.

BeispieleExamples

A.A. Anzeigen des Standardwerts von n bei Verwendung in einer Variablendeklaration.Showing the default value of n when used in variable declaration.

Das folgende Beispiel zeigt, dass der Standardwert von n für die Datentypen char und varchar 1 ist, wenn diese in einer Variablendeklaration verwendet werden.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. Anzeigen des Standardwerts von n, wenn varchar mit CAST und CONVERT verwendet wird.Showing the default value of n when varchar is used with CAST and CONVERT.

Das folgende Beispiel zeigt, dass 30 der Standardwert von n ist, wenn der Datentyp char oder varchar in den Funktionen CAST und CONVERT verwendet wird.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. Konvertieren von Daten zu AnzeigezweckenConverting Data for Display Purposes

Im folgenden Beispiel werden zwei Spalten in Zeichentypen konvertiert und ein bestimmtes Format auf die angezeigten Daten angewendet.The following example converts two columns to character types and applies a style that applies a specific format to the displayed data. Ein money-Typ wird in Zeichendaten konvertiert, und das Format 1 wird angewendet. Bei diesem werden für die Werte zwei Ziffern rechts vom Dezimalpunkt und links vom Dezimalpunkt nach jeder dritten Ziffer ein Trennzeichen angezeigt.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. Ein datetime-Typ wird in Zeichendaten konvertiert, und das Format 3 wird angewendet, durch das die Daten im Format TT/MM/JJ anzeigt werden.A datetime type is converted to character data and style 3 is applied, which displays the data in the format dd/mm/yy. In der WHERE-Klausel wird ein money-Typ in einen Zeichentyp umgewandelt, um einen Vergleichsvorgang für die Zeichenfolgen ausführen zu können.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%';  

Im Folgenden finden Sie das Resultset.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. Konvertieren von uniqueidentifier-DatenConverting Uniqueidentifer Data

Das folgende Beispiel konvertiert einen uniqueidentifier -Wert in einen char -Datentyp.The following example converts a uniqueidentifier value to a char data type.

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

Im folgenden Beispiel wird das Abschneiden von Daten veranschaulicht, wenn der Wert zu lang für den Datentyp ist, in den er konvertiert wird.The following example demonstrates the truncation of data when the value is too long for the data type being converted to. Da der uniqueidentifier -Typ auf 36 Zeichen beschränkt ist, werden die Zeichen, die diese Länge überschreiten, abgeschnitten.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;  

Im Folgenden finden Sie das Resultset.Here is the result set.

String                                       TruncatedValue  
-------------------------------------------- ------------------------------------  
0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong    0E984725-C51C-4BF4-9960-E1C80E27ABA0  
  
(1 row(s) affected)  

Siehe auchSee also

nchar und nvarchar (Transact-SQL)nchar and nvarchar (Transact-SQL)
CAST und CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)
COLLATE (Transact-SQL)COLLATE (Transact-SQL)
Datentypkonvertierung (Datenbank-Engine)Data Type Conversion (Database Engine)
Datentypen (Transact-SQL)Data Types (Transact-SQL)
Schätzen der Größe einer Datenbank Estimate the Size of a Database
Sortierung und Unicode-Unterstützung Collation and Unicode Support
Einzelbyte- und Mehrbyte-ZeichensätzeSingle-Byte and Multibyte Character Sets