Ya, jika database Oracle Anda dibuat menggunakan set karakter Unicode, sebuah NVARCHAR
di SQL Server harus dimigrasikan ke VARCHAR2
di Oracle. Di Oracle, NVARCHAR
tipe data ada untuk memungkinkan aplikasi menyimpan data menggunakan kumpulan karakter Unicode ketika kumpulan karakter database tidak mendukung Unicode.
Satu hal yang harus diperhatikan dalam migrasi, bagaimanapun, adalah semantik panjang karakter. Di SQL Server, sebuah NVARCHAR(20)
mengalokasikan ruang untuk 20 karakter yang membutuhkan hingga 40 byte di UCS-2. Di Oracle, secara default, sebuah VARCHAR2(20)
mengalokasikan 20 byte penyimpanan. Dalam AL32UTF8
set karakter, yang berpotensi hanya cukup ruang untuk 6 karakter meskipun kemungkinan besar akan menangani lebih banyak (satu karakter di AL32UTF8
membutuhkan antara 1 dan 3 byte. Anda mungkin ingin mendeklarasikan tipe Oracle Anda sebagai VARCHAR2(20 CHAR)
yang menunjukkan bahwa Anda ingin mengalokasikan ruang untuk 20 karakter terlepas dari berapa banyak byte yang diperlukan. Itu cenderung jauh lebih mudah untuk dikomunikasikan daripada mencoba menjelaskan mengapa sekitar 20 karakter string diperbolehkan sementara 10 karakter string lainnya ditolak.
Anda dapat mengubah semantik panjang default di tingkat sesi sehingga tabel apa pun yang Anda buat tanpa menentukan semantik panjang apa pun akan menggunakan karakter daripada semantik byte
ALTER SESSION SET nls_length_semantics=CHAR;
Itu memungkinkan Anda menghindari mengetik CHAR
setiap kali Anda menentukan kolom baru. Dimungkinkan juga untuk mengaturnya pada tingkat sistem tetapi hal itu tidak disarankan oleh tim NLS-- rupanya, tidak semua skrip yang disediakan Oracle telah diuji secara menyeluruh terhadap basis data di mana NLS_LENGTH_SEMANTICS
sudah diganti. Dan mungkin sangat sedikit skrip pihak ketiga.