Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analiz Platformu Sistemi (PDW)
Microsoft Fabric'teki SQL analiz uç noktası
Microsoft Fabric'teki ambar
Microsoft Fabric'teki SQL veritabanı
Sabit boyutlu, karakterli veya değişken boyutlu, varchar karakter veri türleri. SQL Server 2019'dan (15.x) başlayarak, UTF-8 etkin harmanlama kullanıldığında, bu veri türleri unicode karakter verilerinin tam aralığını depolar ve UTF-8 karakter kodlamasını kullanır. UTF-8 olmayan bir harmanlama belirtilirse, bu veri türleri bu harmanlamanın ilgili kod sayfası tarafından desteklenen karakterlerin yalnızca bir alt kümesini depolar.
Arguments
char [ ( n ) ]
Sabit boyutlu dize verileri.
n , dize boyutunu bayt cinsinden tanımlar ve 1 ile 8.000 arasında bir değer olmalıdır. gibi Latintek baytlı kodlama karakter kümeleri için depolama boyutu n bayt ve depolanabilen karakter sayısı da n'dir. Çok baytlı kodlama karakter kümeleri için depolama boyutu hala n bayttır, ancak depolanabilecek karakter sayısı n'den küçük olabilir.
Char için ISO eş anlamlısı karakterdir. Karakter kümeleri hakkında daha fazla bilgi için bkz. Single-Byte ve Çok Baytlı Karakter Kümeleri.
varchar [ ( n | maksimum ) ]
Değişken boyutlu dize verileri. Dize boyutunu bayt cinsinden tanımlamak için n kullanın ve 1 ile 8.000 arasında bir değer olabilir veya Doku Veri Ambarı'nda en fazla 2^31-1 bayt (2 GB) veya 1 MB'lık bir depolama alanına kadar sütun kısıtlama boyutunu belirtmek için en yüksek değeri kullanın. gibi Latintek baytlı kodlama karakter kümeleri için depolama boyutu n bayt + 2 bayt ve depolanabilen karakter sayısı da n'dir. Çok baytlı kodlama karakter kümeleri için depolama boyutu hala n bayt + 2 bayttır, ancak depolanabilecek karakter sayısı n'den küçük olabilir.
Varchar için ISO eş anlamlıları karakter veyakarakter farklılık gösterir. Karakter kümeleri hakkında daha fazla bilgi için bkz. Single-Byte ve Çok Baytlı Karakter Kümeleri.
Remarks
Yaygın bir yanılgı, karakter(n) ve varchar(n) ile n'nin karakter sayısını tanımladığını düşünmektir. Ancak, char(n) ve varchar(n)'de n , dize uzunluğunu bayt cinsinden tanımlar (0 - 8.000). n hiçbir zaman depolanabilecek karakter sayısını tanımlamaz. Bu kavram nchar ve nvarchar tanımına benzer.
Yanlış anlamanın nedeni, tek baytlı kodlama kullanılırken char ve varchar depolama boyutunun n bayt ve karakter sayısının da n olmasıdır. Ancak UTF-8 gibi çok baytlı kodlama için, daha yüksek Unicode aralıkları (128 - 1.114.111) iki veya daha fazla bayt kullanan bir karaktere neden olur. Örneğin, char(10) olarak tanımlanan bir sütunda, Veritabanı Altyapısı tek bayt kodlaması kullanan 10 karakter depolayabilir (Unicode aralığı 0 ile 127 arasında), ancak çok baytlı kodlama kullanılırken 10 karakterden daha az (Unicode aralığı 128 ile 1.114.111 arasında). Unicode depolama ve karakter aralıkları hakkında daha fazla bilgi için bkz. UTF-8 ile UTF-16 arasındaki depolama farkları.
n bir veri tanımında veya değişken bildirim deyiminde belirtilmediğinde varsayılan uzunluk 1'dir. ve işlevleri kullanılırken CASTCONVERT belirtilmezse, varsayılan uzunluk 30'dur.
char veya varchar kullanan nesnelere, yan tümcesi kullanılarak belirli bir harmanlama atanmadığı sürece veritabanının COLLATE varsayılan harmanlaması atanır. Harmanlama, karakter verilerini depolamak için kullanılan kod sayfasını denetler.
SQL Server'da çok baytlı kodlamalar şunlardır:
936 ve 950 (Çince), 932 (Japonca) veya 949 (Korece) kod sayfalarını kullanan bazı Doğu Asya dilleri için çift baytlık karakter kümeleri (DBCS).
Kod sayfası 65001 olan UTF-8.
Şunlar için geçerlidir: SQL Server 2019 (15.x) ve sonraki sürümleri.
Birden çok dili destekleyen siteleriniz varsa:
- SQL Server 2019'dan (15.x) başlayarak, Unicode'u desteklemek ve karakter dönüştürme sorunlarını en aza indirmek için UTF-8 özellikli harmanlama kullanmayı göz önünde bulundurun.
- SQL Server Veritabanı Altyapısı'nın önceki bir sürümünü kullanıyorsanız karakter dönüştürme sorunlarını en aza indirmek için Unicode nchar veya nvarchar veri türlerini kullanmayı göz önünde bulundurun.
char veya varchar kullanıyorsanız şunları yapmanızı öneririz:
- Sütun veri girdilerinin boyutları tutarlı olduğunda char kullanın.
- Sütun veri girdilerinin boyutları önemli ölçüde değiştiğinde varchar kullanın.
- Sütun veri girdilerinin boyutları önemli ölçüde değiştiğinde ve dize uzunluğu 8.000 baytı aştığında varchar(max) kullanın.
veya yürütülürken SET ANSI_PADDINGOFF ise, olarak CREATE TABLE tanımlanan bir ALTER TABLE sütunu varchar olarak işlenir.NULL
Warning
Null olmayan her varchar(max) veya nvarchar(max) sütunu, sıralama işlemi sırasında 8.060 bayt satır sınırına göre sayılan 24 bayt ek sabit ayırma gerektirir. Bu, tabloda oluşturulabilecek null olmayan varchar(max) veya nvarchar(max) sütunlarının sayısıyla ilgili örtük bir sınır oluşturabilir.
Tablo oluşturulduğunda (satır boyutu üst sınırının izin verilen en fazla 8.060 bayt'ı aştığını belirten olağan uyarının ötesinde) veya veri ekleme sırasında özel bir hata sağlanmadı. Bu büyük satır boyutu, kümelenmiş dizin anahtarı güncelleştirmesi veya tam sütun kümesinin sıralamaları gibi bazı normal işlemler sırasında hatalara (hata 512 gibi) neden olabilir ve bu durum yalnızca bir işlem gerçekleştirilirken gerçekleşir.
Karakter verilerini dönüştürme
Karakter ifadeleri farklı boyutta bir karakter veri türüne dönüştürüldüğünde, yeni veri türü için çok uzun olan değerler kesilir. Uniqueidentifier türü, bir karakter ifadesinden dönüştürme amacıyla bir karakter türü olarak kabul edilir ve bu nedenle karakter türüne dönüştürmeye yönelik kesme kurallarına tabidir. Örnekler bölümüne bakın.
Karakter ifadesi, karakter (5) karakterden varchar(5) veya char( 20) karakterinden char( 15) gibi farklı bir veri türüne veya boyuttaki bir karakter ifadesine dönüştürüldüğünde, giriş değerinin harmanlanması dönüştürülen değere atanır. Karakter olmayan bir ifade karakter veri türüne dönüştürülürse, dönüştürülen değere geçerli veritabanının varsayılan harmanlaması atanır. Her iki durumda da COLLATE yan tümcesini kullanarak belirli bir harmanlama atayabilirsiniz.
Note
Kod sayfası çevirileri karakter ve varchar veri türleri için desteklenir, ancak metin veri türü için desteklenmez. SQL Server'ın önceki sürümlerinde olduğu gibi, kod sayfası çevirileri sırasında veri kaybı bildirilir.
Yaklaşık bir sayısal veri türüne dönüştürülen karakter ifadeleri isteğe bağlı üstel gösterim içerebilir. Bu notasyon küçük e veya büyük E harften sonra isteğe bağlı artı () veya eksi (+-) işareti ve ardından bir sayıdır.
Tam sayısal veri türüne dönüştürülen karakter ifadeleri basamaklardan, ondalık ayırıcıdan ve isteğe bağlı artı () veya eksiden+ (-) oluşmalıdır. Baştaki boşluklar yoksayılır. dizesinde 123,456.00binlik ayırıcısı gibi virgül ayırıcılarına izin verilmez.
Para veyaküçük ağ veri türlerine dönüştürülen karakter ifadeleri isteğe bağlı ondalık ayırıcı ve dolar işareti ($) de içerebilir. içinde olduğu gibi $123,456.00virgül ayırıcılarına izin verilir.
Boş bir dize int'e dönüştürüldüğünde değeri olur 0. Boş bir dize bir tarihe dönüştürüldüğünde değeri tarih olur( olan 1900-01-01).
Examples
A. Değişken bildiriminde kullanıldığında varsayılan n değerini göster
Aşağıdaki örnekte, değişken bildiriminde kullanıldığında karakter ve varchar veri türleri için varsayılan n değeri 1'dir.
DECLARE @myVariable AS VARCHAR = 'abc';
DECLARE @myNextVariable AS CHAR = 'abc';
--The following query returns 1
SELECT DATALENGTH(@myVariable), DATALENGTH(@myNextVariable);
GO
B. Varchar CAST ve CONVERT ile kullanıldığında varsayılan n değerini göster
Aşağıdaki örnekte, ve işlevleriyle birlikte karakter veya CAST veri türleri kullanıldığında n değerinin varsayılan değerinin CONVERT 30 olduğu gösterilmektedir.
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ürür ve görüntülenen verilere belirli bir biçim uygulayan bir stil uygular.
Para türü karakter verilerine dönüştürülür ve değerleri ondalık noktasının solundaki her üç basamakta bir virgülle ve ondalık noktasının sağındaki iki basamakla gösteren stil 1 uygulanır.
Tarih saat türü karakter verilerine dönüştürülür ve stil 3 uygulanır ve bu da verileri biçiminde dd/mm/yygörüntüler. yan tümcesinde WHERE , bir dize karşılaştırma işlemi gerçekleştirmek için para türü bir karakter türüne dönüştürülür.
USE AdventureWorks2022;
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 aşağıdadı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
D. Uniqueidentifier verilerini dönüştürme
Aşağıdaki örnek bir benzersizleştirici değerini bir char veri türüne dönüştürür.
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 çok uzun olduğunda verilerin kesilmesini gösterir. Uniqueidentifier türü 36 karakterle sınırlı olduğundan, bu uzunluğu aşan karakterler kesilir.
DECLARE @ID NVARCHAR(MAX) = N'0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong';
SELECT @ID, CONVERT(UNIQUEIDENTIFIER, @ID) AS TruncatedValue;
Sonuç kümesi aşağıdadır.
String TruncatedValue
------------------------------------------ ------------------------------------
0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong 0E984725-C51C-4BF4-9960-E1C80E27ABA0