Bagikan melalui


nchar dan nvarchar (Transact-SQL)

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

Jenis data karakter yang berukuran tetap, nchar, atau ukuran variabel, nvarchar. Di SQL Server 2012 (11.x) dan versi yang lebih baru, 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 subset data karakter yang didukung oleh pengodean karakter UCS-2 .

Argumen

nchar [ ( n ) ]

Data string ukuran tetap. n mendefinisikan ukuran string dalam byte-pairs, 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 pasangan pengganti). Sinonim ISO untuk nchar adalah karakter nasional dan karakter nasional.

nvarchar [ ( n | maks ) ]

Data string ukuran variabel. Nilai n mendefinisikan ukuran string dalam byte-pairs, dan dapat 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. Namun, jumlah karakter yang dapat disimpan mungkin lebih kecil dari n, karena Karakter Tambahan menggunakan dua byte-pair (juga disebut pasangan pengganti). 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. Konsep ini mirip dengan definisi char dan varchar.

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 mungkin 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 klausa.

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. Di SQL Server 2019 (15.x) dan versi yang lebih baru, ketika kolase yang diaktifkan UTF-8 digunakan, halaman kode default mampu menyimpan kumpulan karakter Unicode UTF-8.

Saat Anda mengawali konstanta string dengan huruf N, konversi implisit 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 menghasilkan nvarchar (maks) 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 ke jumlah kolom non-null varchar(max) atau nvarchar(max) dalam tabel. Tidak ada kesalahan khusus yang diberikan 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 semacam kumpulan kolom lengkap.

Mengonversi data karakter

Untuk informasi tentang mengonversi data karakter, lihat karakter dan varchar. Untuk informasi selengkapnya tentang mengonversi antara jenis data, lihat CAST dan CONVERT.