nchar dan nvarchar (Transact-SQL)

Berlaku untuk: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Jenis data karakter yang berukuran tetap, nchar, atau ukuran variabel, nvarchar. Dimulai dengan SQL Server 2012 (11.x), ketika kolase karakter tambahan (SC) diaktifkan digunakan, jenis data ini menyimpan berbagai data karakter Unicode dan menggunakan pengodean karakter UTF-16. Jika kolase non-SC ditentukan, maka jenis data ini hanya menyimpan subkumpulan data karakter yang didukung oleh pengodean karakter UCS-2 .

Argumen

nchar [ ( n ) ]

Data string ukuran tetap. n mendefinisikan ukuran string dalam pasangan byte, dan harus berupa nilai dari 1 hingga 4.000. Ukuran penyimpanan adalah dua kali n byte. Untuk pengodean UCS-2 , ukuran penyimpanan adalah dua kali n byte dan jumlah karakter yang dapat disimpan juga n. Untuk pengodean UTF-16, ukuran penyimpanan masih dua kali n byte, tetapi jumlah karakter yang dapat disimpan mungkin lebih kecil dari n karena Karakter Tambahan menggunakan dua byte-pair (juga disebut surrogate-pair). Sinonim ISO untuk nchar adalah karakter nasional dan karakter nasional.

nvarchar [ ( n | maks ) ]

Data string ukuran variabel. n mendefinisikan ukuran string dalam pasangan byte, dan dapat menjadi nilai dari 1 hingga 4.000. max menunjukkan bahwa ukuran penyimpanan maksimum adalah 2^31-1 karakter (2 GB). Ukuran penyimpanan adalah dua kali n byte + 2 byte. Untuk pengodean UCS-2 , ukuran penyimpanan adalah dua kali n byte + 2 byte dan jumlah karakter yang dapat disimpan juga n. Untuk pengodean UTF-16, ukuran penyimpanan masih dua kali n byte + 2 byte, tetapi jumlah karakter yang dapat disimpan mungkin lebih kecil dari n karena Karakter Tambahan menggunakan dua byte-pair (juga disebut surrogate-pair). Sinonim ISO untuk nvarchar adalah karakter nasional yang bervariasi dan karakter nasional bervariasi.

Keterangan

Kesalahpahaman umum adalah berpikir bahwa dengan nchar(n) dan nvarchar(n), n menentukan jumlah karakter. Namun, dalam nchar(n) dan nvarchar(n), n menentukan panjang string dalam byte-pairs (0-4.000). n tidak pernah mendefinisikan jumlah karakter yang dapat disimpan. Ini mirip dengan definisi char(n) dan varchar(n).

Kesalahpahaman terjadi karena saat menggunakan karakter yang ditentukan dalam rentang Unicode 0 hingga 65.535, satu karakter dapat disimpan per setiap pasangan byte. Namun, dalam rentang Unicode yang lebih tinggi (65.536 hingga 1.114.111) satu karakter dapat menggunakan dua pasangan byte. Misalnya, dalam kolom yang didefinisikan sebagai nchar(10), Mesin Database dapat menyimpan 10 karakter yang menggunakan satu pasangan byte (rentang Unicode 0 hingga 65.535), tetapi kurang dari 10 karakter saat menggunakan dua pasangan byte (rentang Unicode 65.536 hingga 1.114.111). Untuk informasi selengkapnya tentang penyimpanan Unicode dan rentang karakter, lihat Perbedaan penyimpanan antara UTF-8 dan UTF-16.

Ketika n tidak ditentukan dalam definisi data atau pernyataan deklarasi variabel, panjang defaultnya adalah 1. Ketika n tidak ditentukan dengan fungsi CAST, panjang defaultnya adalah 30.

Jika Anda menggunakan nchar atau nvarchar, kami sarankan Anda:

  • Gunakan nchar saat ukuran entri data kolom konsisten.
  • Gunakan nvarchar saat ukuran entri data kolom sangat bervariasi.
  • Gunakan nvarchar(max) saat ukuran entri data kolom sangat bervariasi, dan panjang string mungkin melebihi 4.000 byte-pairs.

sysname adalah jenis data yang ditentukan pengguna yang disediakan sistem yang secara fungsional setara dengan nvarchar(128), kecuali tidak dapat diubah ke null. sysname digunakan untuk mereferensikan nama objek database.

Objek yang menggunakan nchar atau nvarchar diberi kolase default database kecuali kolase tertentu ditetapkan menggunakan COLLATE klausul .

SET ANSI_PADDING selalu ON untuk nchar dan nvarchar. SET ANSI_PADDING OFF tidak berlaku untuk jenis data nchar atau nvarchar .

Awali konstanta string karakter Unicode dengan huruf N untuk memberi sinyal input UCS-2 atau UTF-16, tergantung pada apakah kolase SC digunakan atau tidak. Tanpa awalan N , string dikonversi ke halaman kode default database yang mungkin tidak mengenali karakter tertentu. Dimulai dengan SQL Server 2019 (15.x), ketika kolase berkemampuan UTF-8 digunakan, halaman kode default mampu menyimpan kumpulan karakter Unicode UTF-8.

Saat mengawali konstanta string dengan huruf N, konversi implisit akan menghasilkan string UCS-2 atau UTF-16 jika konstanta yang akan dikonversi tidak melebihi panjang maksimum untuk jenis data string nvarchar (4.000). Jika tidak, konversi implisit akan menghasilkan nvarchar(max) bernilai besar.

Peringatan

Setiap kolom varchar(maks) atau nvarchar(maks) non-null memerlukan 24 byte alokasi tetap tambahan, yang dihitung terhadap batas baris 8.060 byte selama operasi pengurutan. Byte tambahan ini dapat membuat batas implisit untuk jumlah kolom non-null varchar(max) atau nvarchar(max) dalam tabel. Tidak ada kesalahan khusus yang disediakan ketika tabel dibuat (di luar peringatan biasa bahwa ukuran baris maksimum melebihi maksimum 8.060 byte yang diizinkan) atau pada saat penyisipan data. Ukuran baris besar ini dapat menyebabkan kesalahan (seperti kesalahan 512) yang mungkin tidak diantisipasi pengguna selama beberapa operasi normal. Dua contoh operasi adalah pembaruan kunci indeks berkluster, atau pengurutan kumpulan kolom lengkap.

Mengonversi data karakter

Untuk informasi tentang mengonversi data karakter, lihat char dan varchar (Transact-SQL).

Lihat juga