char und varchar (Transact-SQL)

Zeichenfolgendatentypen mit fester oder variabler Länge.

  • char [ ( n ) ]
    Nicht-Unicode-Zeichenfolgendaten mit fester Länge. n definiert die Zeichenfolgenlänge und muss ein Wert von 1 bis 8.000 sein. Die Speichergröße beträgt n Bytes. Das ISO-Synonym für char ist character.

  • varchar [ ( n | max ) ]
    Nicht-Unicode-Zeichenfolgendaten mit variabler Länge. n definiert die Zeichenfolgenlänge und kann ein Wert von 1 bis 8.000 sein. max gibt an, dass die maximale Speichergröße 2^31-1 Byte (2 GB) beträgt. Die Speicherplatzgröße ist die tatsächliche Länge der eingegebenen Daten + 2 Byte. Die ISO-Synonyme für varchar sind char varying oder character varying.

Hinweise

Wenn n in einer Datendefinitions- oder Variablendeklarationsanweisung nicht angegeben ist, beträgt die Standardlänge 1. Wenn n für die Verwendung der CAST- und CONVERT-Funktionen nicht angegeben ist, beträgt die Standardlänge 30.

Objekten, für die char oder varchar verwendet wird, wird die Standardsortierung der Datenbank zugewiesen, es sei denn, mit der COLLATE-Klausel wird eine bestimmte Sortierung zugewiesen. Die Sortierung bestimmt die Codepage, die zum Speichern der Zeichendaten verwendet wird.

Für Sites, die mehrere Sprachen unterstützen, sollte erwogen werden, den Unicode-Datentyp nchar oder nvarchar zu verwenden, um Probleme bei der Zeichenkonvertierung zu minimieren. Wenn Sie char oder varchar verwenden, empfehlen wir Folgendes:

  • Verwenden Sie char, wenn die Dateneinträge einer Spalte jeweils gleich lang sind.

  • Verwenden Sie varchar, wenn sich die Dateneinträge einer Spalte in ihrer Größe erheblich unterscheiden.

  • Verwenden Sie varchar(max), wenn die Dateneinträge einer Spalte unterschliedlich lang und größer als 8.000 Byte sein können.

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.

Auch wenn die Sortierungscodepage Doppelbytezeichen verwendet, ist die Speichergröße nach wie vor n Byte. Abhängig von der Zeichenfolge kann die Speichergröße von n Byte weniger als n Zeichen betragen.

Konvertieren von Zeichendaten

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. 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. Weitere Informationen finden Sie im Abschnitt "Beispiele" weiter unten.

Wenn ein Zeichenausdruck in einen Zeichenausdruck eines anderen Datentyps oder einer anderen Größe konvertiert wird (char(5) in varchar(5) oder char(20) in char(15)), wird die Sortierung des Eingabewerts dem konvertierten Wert zugewiesen. Wird ein Nichtzeichenausdruck zu einem Zeichendatentyp konvertiert, wird die Standardsortierung der aktuellen Datenbank dem konvertierten Wert zugewiesen. In beiden Fällen können Sie mithilfe der COLLATE-Klausel auch eine bestimmte Sortierung zuweisen.

HinweisHinweis

Codepageübersetzungen werden für die Datentypen char und varchar, nicht jedoch für den text-Datentyp unterstützt. Wie auch bei früheren Versionen von SQL Server wird der Datenverlust während der Codepageübersetzung nicht gemeldet.

Zeichenausdrücke, die in einen ungefähren numeric-Datentyp konvertiert werden, können die optionale Exponentialschreibweise enthalten (den Kleinbuchstaben e oder den Großbuchstaben E, auf den ein optionales Plus- (+) oder Minuszeichen (-) und dann eine Zahl folgen).

Zeichenausdrücke, die in einen exakten numeric-Datentyp konvertiert werden, müssen aus Ziffern, einem Dezimaltrennzeichen und einem optionalen Plus- (+) oder Minuszeichen (-) zusammengesetzt sein. Führende Leerzeichen werden ignoriert. Kommas als Trennzeichen (z. B. das Trennzeichen in 123.456,00) sind in der Zeichenfolge nicht zulässig.

Zeichenausdrücke, die in die Datentypen money odersmallmoney konvertiert werden, können außerdem ein optionales Dezimaltrennzeichen und ein Dollarzeichen ($) enthalten. Kommas als Trennzeichen (wie in 123.456,00 $) sind zulässig.

Beispiele

A.Anzeigen des Standardwerts von n bei Verwendung in einer Variablendeklaration.

Das folgende Beispiel zeigt, dass der Standardwert von n für die Datentypen char und varchar 1 ist, wenn sie in einer Variablendeklaration verwendet werden.

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

B.Anzeigen des Standardwerts von n, wenn varchar mit CAST und CONVERT verwendet wird.

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.

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.Konvertieren von Daten zu Anzeigezwecken

Im folgenden Beispiel werden zwei Spalten in Zeichentypen konvertiert und ein bestimmtes Format auf die angezeigten Daten angewendet. Ein money-Typ wird in Zeichendaten konvertiert, und das Format 1 wird angewendet, bei dem für die Werte zwei Ziffern rechts vom Dezimalpunkt und links vom Dezimalpunkt nach jeder dritten Ziffer ein Komma angezeigt wird. Ein datetime-Typ wird in Zeichendaten konvertiert, und das Format 3 wird angewendet, durch das die Daten im Format dd/mm/yy anzeigt werden. In der WHERE-Klausel wird ein money-Typ in einen Zeichentyp umgewandelt, um einen Vergleichsvorgang für die Zeichenfolgen ausführen zu können.

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%';

Dies ist das Resultset.

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.Konvertieren von uniqueidentifier-Daten

Das folgende Beispiel konvertiert einen uniqueidentifier-Wert in einen char-Datentyp.

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. Da der uniqueidentifier-Typ auf 36 Zeichen beschränkt ist, werden die Zeichen, die diese Länge überschreiten, abgeschnitten.

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

Dies ist das Resultset.

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

(1 row(s) affected)

Siehe auch

Verweis

nchar und nvarchar (Transact-SQL)

CAST und CONVERT (Transact-SQL)

COLLATE (Transact-SQL)

Datentypen (Transact-SQL)

Konzepte

Datentypkonvertierung (Datenbankmodul)

Andere Ressourcen

Schätzen der Größe einer Datenbank