Pertanyaan Apa perbedaan antara varchar dan nvarchar?


Apakah hanya itu nvarchar mendukung karakter multibyte? Jika itu masalahnya, apakah memang ada gunanya, selain masalah penyimpanan, untuk menggunakan varchars?


1167
2017-09-27 19:34


asal


Jawaban:


Sebuah nvarchar kolom dapat menyimpan data Unicode apa pun. SEBUAH varchar kolom dibatasi ke sebuah 8-bit codepage. Sebagian orang berpikir demikian varchar harus digunakan karena tidak memakan banyak ruang. Saya yakin ini bukan jawaban yang benar. Inkompabilitas codepage adalah rasa sakit, dan Unicode adalah obat untuk masalah codepage. Dengan disk dan memori murah saat ini, benar-benar tidak ada alasan untuk membuang-buang waktu dengan halaman kode lagi.

Semua sistem operasi modern dan platform pengembangan menggunakan Unicode secara internal. Dengan menggunakan nvarchar daripada varchar, Anda dapat menghindari melakukan encoding konversi setiap kali Anda membaca atau menulis ke database. Konversi membutuhkan waktu, dan rentan terhadap kesalahan. Dan pemulihan dari kesalahan konversi adalah masalah yang tidak sepele.

Jika Anda berinteraksi dengan aplikasi yang hanya menggunakan ASCII, saya masih akan merekomendasikan menggunakan Unicode dalam database. Algoritma pengumpulan basis data dan OS akan bekerja lebih baik dengan Unicode. Unicode menghindari masalah konversi saat berinteraksi dengan lain sistem. Dan Anda akan bersiap untuk masa depan. Dan Anda selalu dapat memvalidasi bahwa data Anda dibatasi hingga 7-bit ASCII untuk sistem warisan apa pun yang harus Anda pertahankan, bahkan sambil menikmati beberapa manfaat dari penyimpanan Unicode penuh.


1435
2017-09-29 02:16



varchar: Variabel-panjang, data karakter non-Unicode. Pengumpulan basis data menentukan halaman kode mana yang disimpan data menggunakan.

nvarchar: Data karakter Unicode variabel-panjang. Bergantung pada pengumpulan basis data untuk perbandingan.

Berbekal pengetahuan ini, gunakan mana yang cocok dengan data input Anda (ASCII v. Unicode).


224
2017-09-27 19:37



Saya selalu menggunakan nvarchar karena memungkinkan apa pun yang saya bangun untuk menahan hampir semua data yang saya lempar. Sistem CMS saya melakukan Cina secara tidak sengaja, karena saya menggunakan nvarchar. Hari-hari ini, aplikasi baru apa pun seharusnya tidak terlalu peduli dengan jumlah ruang yang dibutuhkan.


61
2017-09-27 19:37



Di sini Anda dapat melihat perbedaan antara varchar dan nvarchar.

Enter image description here

Enter image description here

Enter image description here

Enter image description here

Referensi: SqlHints.com

Untuk informasi lebih lanjut tentang Nvarchar dan varchar, lihat posting blog ini.


42
2017-11-24 08:45



Itu tergantung pada bagaimana Oracle diinstal. Selama proses instalasi, opsi NLS_CHARACTERSET diatur. Anda mungkin dapat menemukannya dengan kueri SELECT value$ FROM sys.props$ WHERE name = 'NLS_CHARACTERSET'.

Jika NLS_CHARACTERSET Anda adalah pengkodean Unicode seperti UTF8, bagus. Menggunakan VARCHAR dan NVARCHAR sangat mirip. Berhenti membaca sekarang, lakukan saja. Jika tidak, atau jika Anda tidak memiliki kontrol atas set karakter Oracle, baca terus.

VARCHAR - Data disimpan dalam pengkodean NLS_CHARACTERSET. Jika ada contoh basis data lain di server yang sama, Anda mungkin dibatasi oleh mereka; dan sebaliknya, karena Anda harus berbagi pengaturan. Bidang semacam itu dapat menyimpan data apa pun yang dapat dikodekan menggunakan rangkaian karakter tersebut, dan tidak ada yang lain. Jadi misalnya jika set karakter adalah MS-1252, Anda hanya dapat menyimpan karakter seperti huruf Inggris, beberapa huruf beraksen, dan beberapa lainnya (seperti € dan -). Aplikasi Anda akan berguna hanya untuk beberapa lokal, tidak dapat beroperasi di tempat lain di dunia. Untuk alasan ini, itu dianggap sebagai Ide Buruk.

NVARCHAR - Data disimpan dalam pengkodean Unicode. Setiap bahasa didukung. Sebuah ide bagus.

Bagaimana dengan ruang penyimpanan? VARCHAR umumnya efisien, karena set karakter / pengkodean dirancang khusus untuk lokal tertentu. Bidang NVARCHAR menyimpan dalam pengkodean UTF-8 atau UTF-16, berdasarkan pada pengaturan NLS yang cukup ironis. UTF-8 sangat efisien untuk bahasa "Barat", sementara masih mendukung bahasa Asia. UTF-16 sangat efisien untuk bahasa Asia, sementara masih mendukung bahasa "Barat". Jika khawatir tentang ruang penyimpanan, pilih pengaturan NLS untuk menyebabkan Oracle menggunakan UTF-8 atau UTF-16 yang sesuai.

Bagaimana dengan kecepatan pemrosesan? Kebanyakan platform pengkodean baru menggunakan Unicode secara native (Java, .NET, bahkan C ++ std :: wstring dari tahun yang lalu!) Jadi jika bidang basis data VARCHAR itu memaksa Oracle untuk mengkonversi antara set karakter pada setiap membaca atau menulis, tidak begitu baik. Menggunakan NVARCHAR menghindari konversi.

Intinya: Gunakan NVARCHAR! Ini menghindari keterbatasan dan ketergantungan, baik untuk ruang penyimpanan, dan biasanya juga terbaik untuk kinerja.


29
2017-10-07 18:08



menyimpan data nvarchar sebagai Unicode, jadi, jika Anda akan menyimpan data multibahasa (lebih dari satu bahasa) di kolom data, Anda memerlukan varian N.


15
2017-09-27 19:36



Dua sen saya

  1. Indeks dapat gagal ketika tidak menggunakan tipe data yang benar:
    Di SQL Server: Bila Anda memiliki indeks di atas kolom VARCHAR dan menyajikannya Unicode String, SQL Server tidak menggunakan indeks. Hal yang sama terjadi ketika Anda menyajikan BigInt ke kolom-indeks yang mengandung SmallInt. Bahkan jika BigInt cukup kecil untuk menjadi SmallInt, SQL Server tidak dapat menggunakan indeks. Cara lain di sekitar Anda tidak memiliki masalah ini (saat menyediakan SmallInt atau Ansi-Code ke kolom BigInt atau NVARCHAR yang diindeks).

  2. Datatypes dapat bervariasi antara DBMS (DataBase Management System) yang berbeda:
    Ketahuilah bahwa setiap database memiliki tipe data yang sedikit berbeda dan VARCHAR tidak berarti sama di mana-mana. Sementara SQL Server memiliki VARCHAR dan NVARCHAR, database Apache / Derby hanya memiliki VARCHAR dan VARCHAR ada di Unicode.


13
2018-04-19 09:53