char und varchar (Transact-SQL)

 

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)jaAzure SQL-DatenbankjaAzure SQL Data Warehouse jaParallel Data Warehouse

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 zwischen 1 und 8.000 sein. Die Speichergröße beträgt n Bytes. Das ISO-Synonym für Char ist Zeichen.

Varchar [( n | max )]
Nicht-Unicode-Zeichenfolgendaten mit variabler Länge. n definiert die Zeichenfolgenlänge und kann ein Wert zwischen 1 und 8.000 sein. Max. Gibt an, dass die maximale Speichergröße 2 ^ 31-1 Bytes (2 GB). Die Speicherplatzgröße ist die tatsächliche Länge der eingegebenen Daten + 2 Byte. Die ISO-Synonyme für Varchar sind Charvarying oder Charactervarying.

Wenn n ist nicht angegeben in einer Datendefinitions- oder variablendeklarationsanweisung, die Standardlänge 1. Wenn n nicht angegeben wird, wenn die Funktionen CAST und CONVERT verwenden die Standardlänge 30.

Objekte, bei denen Char oder Varchar werden die standardsortierung der Datenbank zugewiesen, es sei denn, eine bestimmte Sortierung zugewiesen ist, mithilfe der COLLATE-Klausel. Die Sortierung bestimmt die Codepage, die zum Speichern der Zeichendaten verwendet wird.

Wenn Sie Standorte, die mehrere Sprachen zu unterstützen haben, erwägen Sie die Unicode Nchar oder Nvarchar Datentypen, um Probleme mit der zeichenkonvertierung zu minimieren. Bei Verwendung von Char oder Varchar, empfehlen wir Folgendes:

  • Verwendung Char Wenn die Größen der spaltendateneinträge konsistent sind.

  • Verwendung Varchar Wenn die Größen der spaltendateneinträge erheblich variieren.

  • Verwendung varchar(max) Wenn die Größen der spaltendateneinträge unterschliedlich lang und die Größe möglicherweise 8.000 Byte überschreiten.

Wenn SET ANSI_PADDING auf OFF festgelegt ist, bei der CREATE TABLE- oder ALTER TABLE ausgeführt wird, eine Char als NULL, als behandelt wird definierte Spalte Varchar.

Wenn die Codeseite der zielsortierung Doppelbytezeichen verwendet, ist immer noch die Speichergröße n Bytes. Abhängig von der Zeichenfolge, die Speichergröße der n Bytes kann weniger als n Zeichen.

Warnung! Jeder nicht-Null-varchar(max) bzw. nvarchar(max)-Spalte erfordert 24 Byte zusätzliche feste Verteilung, das für das Zeilenlimit von 8.060 Byte während eines Sortiervorgangs zählt. Dies kann zur Erstellung einer impliziten Beschränkung der Anzahl der nicht-Null-varchar(max) bzw. nvarchar(max)-Spalten, die in einer Tabelle erstellt werden können. Beim Erstellen der Tabelle (außerhalb der üblichen Warnung darüber, dass die maximale Zeilengröße das zulässige Maximum von 8.060 Bytes überschreitet) oder zum Zeitpunkt der Dateneinfügung wird kein spezieller Fehler ausgegeben. Diese große Zeilengröße kann während einiger normaler Vorgänge Fehler (z. B. Fehler 512) verursachen. Dazu gehören z. B. die Aktualisierung des gruppierten Indexschlüssels oder Teile des vollständigen Spaltensatzes. Bis zum Ausführen eines Vorgangs können Benutzer diese Fehler nicht vorhersehen.

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 konvertiert in einen Zeichenausdruck eines anderen Datentyp oder die Größe, wie z. B. aus char(5) auf varchar(5), oder char(20) zu 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 eine bestimmte Sortierung zuweisen, indem Sie mit der COLLATE Klausel.

System_CAPS_ICON_note.jpg Hinweis


Codepageübersetzungen werden für unterstützt Char und Varchar Datentypen, jedoch nicht für Text -Datentyp. 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 konvertiert werden numerischen -Datentyp kann optionale Exponentialschreibweise enthalten (den Kleinbuchstaben e oder E Großbuchstaben gefolgt, ein optionales Plus-(+) oder Minuszeichen (-) und dann eine Zahl).

Zeichenausdrücke, die in einen exakten konvertiert werden numerischen Datentyp bestehen muss aus Ziffern, einem Dezimaltrennzeichen und einem optionalen Plus-(+) oder Minuszeichen (-). 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 er konvertiert Money oder Smallmoney Datentypen können auch einen optionalen Dezimaltrennzeichen und ein Dollarzeichen ($) enthalten. Kommas als Trennzeichen (wie in&123;.456,00 $) sind zulässig.

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

Das folgende Beispiel zeigt den Standardwert n ist 1 für die char und varchar -Datentypen, 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 den Wert von n ist 30 bei der char oder varchar Datentypen verwendet werden, mit der CAST und CONVERT Funktionen.

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 Format 1 wird angewendet, woraufhin die Werte durch Kommas jeder dritten Ziffer links vom Dezimaltrennzeichen und zwei Ziffern rechts vom Dezimaltrennzeichen an. Ein "DateTime" Typ wird in Zeichendaten konvertiert und Format 3 wird angewendet, die die Daten im Format tt/mm/jj angezeigt. In der WHERE-Klausel einer Money Typ in einen Zeichentyp auszuführenden Zeichenfolgenvergleich umgewandelt wird.

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.

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;  

Im Folgenden finden Sie das Resultset.

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

Nchar und Nvarchar ( Transact-SQL )
CAST und CONVERT ( Transact-SQL )
COLLATE ( Transact-SQL )
Datentypkonvertierung ( Datenbankmodul )
Datentypen ( Transact-SQL )
Schätzen der Größe einer Datenbank

Community-Beiträge

HINZUFÜGEN
Anzeigen: