Aracılığıyla paylaş


nchar ve nvarchar (Transact-SQL)

Şunlar için geçerlidir: Sql ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)SQL veritabanıMicrosoft Fabric

sabit boyutlu, ncharveya değişken boyutlu karakter veri türleri nvarchar. SQL Server 2012 (11.x) ve sonraki sürümlerinde, Tamamlayıcı Karakter (SC) etkin harmanlama kullanıldığında, bu veri türleri Unicode karakter verilerinin tam aralığını depolar ve utf-16 karakter kodlamasını kullanır. SC olmayan bir harmanlama belirtilirse, bu veri türleri yalnızca UCS-2 karakter kodlaması tarafından desteklenen karakter verilerinin alt kümesini depolar.

Bağımsız değişken

nchar [ ( n ) ]

Sabit boyutlu dize verileri. n, dize boyutunu bayt çiftleri olarak tanımlar ve 1 ile 4.000 arasında bir değer olmalıdır. Depolama boyutu iki kat n bayttır. UCS-2 kodlaması için depolama boyutu iki kezdir n bayt ve depolanabilen karakter sayısı da n. UTF-16 kodlaması için, depolama boyutu n bayt hala iki kezdir, ancak Ek Karakterler iki bayt çifti kullandığından (vekil çiftolarak da adlandırılır) depolanabilen karakter sayısı n'den küçük olabilir. nchar için ISO eş anlamlıları ulusal karakter ve ulusal karakter.

nvarchar [ ( n | max ) ]

Değişken boyutlu dize verileri. n değeri bayt çiftlerinde dize boyutunu tanımlar ve 1 ile 4.000 arasında olabilir. maksimum, maksimum depolama boyutunun 2^31-1 karakter (2 GB) olduğunu gösterir. Depolama boyutu iki kat n bayt + 2 bayttır. UCS-2 kodlaması için depolama boyutu iki kezdir n bayt + 2 bayt ve depolanabilen karakter sayısı da n. UTF-16 kodlaması için depolama boyutu, n bayt + 2 bayt iki kezdir. Ancak, Ek Karakterler iki bayt çifti (vekil çiftolarak da adlandırılır) kullandığından, depolanabilen karakter sayısı nküçük olabilir. nvarchar için ISO eş anlamlıları, değişen ulusal karakter vedeğişen ulusal karakter .

Açıklamalar

Yaygın bir yanlış anlama, nchar(n) ve nvarchar(n)ile n karakter sayısını tanımladığını düşünmektir. Ancak, nchar(n) ve nvarchar(n)içinde, n dize uzunluğunu bayt çiftleri (0-4.000) olarak tanımlar. n hiçbir zaman depolanabilecek karakter sayısını tanımlamaz. Bu kavram, char ve varchartanımına benzer.

Yanlış anlamanın nedeni, Unicode aralığı 0 ile 65.535 arasında tanımlanan karakterler kullanıldığında her bayt çifti başına bir karakter depolanabilmesidir. Ancak, daha yüksek Unicode aralıklarında (65.536 - 1.114.111) bir karakter iki bayt çifti kullanabilir. Örneğin, nchar(10)olarak tanımlanan bir sütunda, Veritabanı Altyapısı bir bayt çifti (Unicode aralığı 0 -65.535) kullanan 10 karakter depolayabilir, ancak iki bayt çifti kullanırken 10 karakterden daha az (Unicode aralığı 65.536 ile 1.114.111) arasında olabilir. 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. CAST işleviyle n belirtilmediğinde varsayılan uzunluk 30'dur.

nchar veya nvarcharkullanıyorsanız şunları yapmanızı öneririz:

  • Sütun veri girdilerinin boyutları tutarlı olduğunda nchar kullanın.
  • Sütun veri girişlerinin boyutları önemli ölçüde değiştiğinde nvarchar kullanın.
  • Sütun veri girişlerinin boyutları önemli ölçüde değiştiğinde ve dize uzunluğu 4.000 bayt çiftini aştığında nvarchar(max) kullanın.

sysname, nvarchar(128)ile eşdeğer olan sistem tarafından sağlanan kullanıcı tanımlı bir veri türüdür, ancak null atanamaz. sysname, veritabanı nesne adlarına başvurmak için kullanılır.

nchar veya nvarchar kullanan nesnelere, COLLATE yan tümcesi kullanılarak belirli bir harmanlama atanmadığı sürece veritabanının varsayılan harmanlaması atanır.

SET ANSI_PADDING nchar ve nvarchariçin her zaman ON. SET ANSI_PADDING OFF nchar veya nvarchar veri türleri için geçerli değildir.

Sc harmanlamasının kullanılıp kullanılmadığına bağlı olarak UCS-2 veya UTF-16 girişine sinyal vermek için unicode karakter dizesi sabitlerine N harfi ön ekini ekleyin. N ön eki olmadan dize, veritabanının belirli karakterleri tanımayabilecek varsayılan kod sayfasına dönüştürülür. SQL Server 2019 (15.x) ve sonraki sürümlerinde UTF-8 özellikli harmanlama kullanıldığında, varsayılan kod sayfası Unicode UTF-8 karakter kümesini depolayabilen bir sayfadır.

Bir dize sabitine Nharfinin ön ekini eklediğinizde, dönüştürülecek sabit nvarchar dize veri türü (4.000) için maksimum uzunluğu aşmazsa örtük dönüştürme UCS-2 veya UTF-16 dizesine neden olur. Aksi takdirde örtük dönüştürme, nvarchar(max)büyük değere neden olur.

Uyarı

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 ek baytlar, bir tablodaki boş olmayan varchar(max) veya nvarchar(max) sütun sayısı için ö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, bazı normal işlemler sırasında kullanıcıların tahmin etmeyebileceği hatalara (hata 512 gibi) neden olabilir. İki işlem örneği, kümelenmiş dizin anahtarı güncelleştirmesi veya tam sütun kümesinin sıralarıdır.

Karakter verilerini dönüştürme

Karakter verilerini dönüştürme hakkında bilgi için bkz. char ve varchar. Veri türleri arasında dönüştürme hakkında daha fazla bilgi için bkz. CAST ve CONVERT.