karakter ve değişken karakter (Transact-SQL)

Sabit veya değişken uzunlukta dize veri türleridir.

  • char [ ( n ) ]
    Sabit uzunlukta, Unicode olmayan dize verileri. n dize uzunluğunu tanımlar ve 1 ile 8.000 arasında bir değer olmalıdır. Depolama boyutu n bayttır. char sözcüğünün ISO eşanlamlısı character sözcüğüdür.

  • varchar [ ( n | max ) ]
    Değişken uzunlukta, Unicode olmayan dize verileri. n dize uzunluğunu tanımlar ve 1 ile 8.000 arasında bir değer olabilir. max en büyük depolama boyutunun 2^31-1 bayt (2 GB) olduğunu gösterir. Depolama boyutu, girilen verilerin gerçek uzunluğu + 2 bayttır. varchar sözcüğünün ISO eşanlamlıları char varying veya character varying sözcükleridir.

Açıklamalar

Bir veri tanımı veya değişken bildirimi deyiminde n belirtilmediğinde, varsayılan uzunluk 1'dir. CAST ve CONVERT işlevleri kullanılırken n belirtilmediğinde varsayılan uzunluk 30'dur.

COLLATE yan tümcesi kullanılarak belirli bir harmanlama atanmadıysa, char veya varchar kullanan nesnelere veritabanının varsayılan harmanlaması atanır. Harmanlama, karakter verilerinin depolanmasında kullanılan kod sayfasını denetler.

Birden fazla dili destekleyen siteleriniz varsa, karakter dönüştürme sorunlarını en aza indirmek için nchar veya nvarchar Unicode veri türlerini kullanmayı düşünün. char veya varchar kullanıyorsanız, aşağıdakileri öneririz:

  • Sütun verisi girişlerinin boyutları değişmiyorsa char kullanın.

  • Sütun verisi girişlerinin boyutu önemli oranda değişkenlik gösteriyorsa, varchar kullanın.

  • Sütun verisi girişlerinin boyutu önemli oranda değişkenlik gösteriyorsa ve boyut 8.000 baytı aşabilirse, varchar(max) kullanın.

CREATE TABLE veya ALTER TABLE çalıştırıldığında SET ANSI_PADDING ayarı OFF ise, NULL olarak tanımlanmış bir char sütunu varchar olarak ele alınır.

Harmanlama kod sayfası çift bayt karakterler kullandığında, depolama boyutu hala n bayttır. Karakter dizesine bağlı olarak n baytlık depolama boyutu n karakterden az olabilir.

Karakter Verilerini Dönüştürme

Karakter ifadeleri farklı boyuttaki bir karakter veri türüne dönüştürülürse, yeni veri türü için çok uzun olan değerler kısaltılır. uniqueidentifier türü bir karakter ifadesinden dönüştürme amaçlı bir karakter türü olarak görülür ve dolayısıyla karakter türü dönüştürmede geçerli olan kurallara tabidir. Aşağıdaki Örnekler bölümüne bakın.

Bir karakter ifadesi başka bir veri türünde veya boyutta bir karakter ifadesine; örneğin char(5) türünden varchar(5) türüne ya da char(20) türünden char(15) türüne dönüştürüldüğünde, girdi değerinin harmanlaması dönüştürülen değere atanır. Karakter türünde olmayan bir ifade bir karakter veri türüne dönüştürülürse, geçerli veritabanının varsayılan harmanlaması dönüştürülen değere atanır. Her durumda COLLATE yan tümcesini kullanarak belirli bir harmanlama atayabilirsiniz.

[!NOT]

Kod sayfası çevirileri char ve varchar veri türleri için desteklenir, text veri türü için desteklenmez. SQL Server'ın önceki sürümlerinde olduğu gibi kod sayfası çevirme sırasında oluşan veri kayıpları bildirilmez.

Yaklaşık bir numeric veri türüne dönüştürülen karakter ifadeleri isteğe bağlı üstel gösterim (küçük harf e veya büyük harf E, ardından isteğe bağlı bir artı (+) veya eksi işareti (-), sonra bir sayı) içerebilir.

Yaklaşık bir numeric veri türüne dönüştürülmekte olan karakter ifadeleri rakamlardan, küsürat işaretinden ve isteğe bağlı bir artı (+) veya eksi (-) işaretinden oluşmalıdır. Soldaki boşluklar yoksayılır. Dizede 123.456,00 rakamındaki küsürat ayracı gibi virgül kullanılamaz.

money veya smallmoney veri türlerine dönüştürülmekte olan karakter ifadeleri ayrıca isteğe bağlı bir küsürat işareti ve ABD para birimi işareti ($) içerebilir. $123.456,00 sayısında olduğu gibi virgül kullanılamaz.

Örnekler

A.Değişken bildiriminde kullanıldığında n'nin varsayılan değerini gösterme.

Aşağıdaki örnek, n'nin varsayılan değerinin char ve varchar veri türleri için, bunlar değişken bildiriminde kullanıldığında 1 olduğunu göstermektedir.

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

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

B.varchar türü CAST ve CONVERT ile kullanıldığında n'nin varsayılan değerini gösterme.

Aşağıdaki örnek, n'nin varsayılan değerinin, char veya varchar veri türleri CAST ve CONVERT işlevleri ile kullanıldığında 30 olduğunu göstermektedir.

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

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.Verileri Görüntüleme Amacıyla Dönüştürme

Aşağıdaki örnek iki sütunu karakter türlerine dönüştürmekte ve görüntülenen verilere belirli bir biçim uygulayan bir tarz uygulamaktadır. Bir money türü karakter veri türüne dönüştürülmekte ve değerleri küsürat işaretinin solunda kalan her üç rakamın arasına virgül koyarak görüntüleyen stil 1 uygulanmaktadır. Bir datetime türü karakter verilerine dönüştürülmekte ve verileri dd/mm/yy biçiminde görüntüleyen stil 3 uygulanmaktadır. WHERE yan tümcesinde bir money türü, bir dize karşılaştırma işlemi gerçekleştirmek için bir karakter türüne dönüştürülmektedir.

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

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

Sonuç kümesi buradadır.

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

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.Uniqueidentifer Verilerini Dönüştürme

Aşağıdaki örnek bir uniqueidentifier değerini bir char veri türüne dönüştürmektedir.

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

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

Aşağıdaki örnek, değer dönüştürülen veri türü için fazla uzun olduğunda verilerin kısaltılmasını göstermektedir. uniqueidentifier türü 36 karakterle sınırlı olduğundan, bu uzunluğu aşan karakterler kısaltılır.

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

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

Sonuç kümesi buradadır.

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

(1 row(s) affected)

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

(1 row(s) affected)

Ayrıca bkz.

Başvuru

n karakter ve n değişken karakter (Transact-SQL)

CAST ve CONVERT (Transact-SQL)

HARMANLAMA (Transact-sql)

Veri Türleri (Transact-SQL)

Kavramlar

Veri türü dönüştürme (veritabanı altyapısı)

Diğer Kaynaklar

Veritabanı boyutunu tahmin etmek