Anda dapat, seperti yang telah ditunjukkan orang lain, mengonversi string Java ke array byte menggunakan set karakter database Oracle dan kemudian mendapatkan panjangnya dalam byte dari itu. Namun, itu bergantung pada mengetahui apa set karakter database Anda-- database yang berbeda akan memiliki set karakter yang berbeda yang akan menghasilkan panjang byte yang berbeda untuk string yang sama dalam set karakter yang berbeda.
Dengan asumsi bahwa database Anda menggunakan set karakter lebar variabel seperti UTF-8 (NLS_CHARACTERSET
dari AL32UTF8), Anda juga dapat mendeklarasikan kolom di Oracle berdasarkan panjang karakter daripada panjang byte. Itu dapat menyederhanakan kode Anda karena Anda bisa memeriksa panjang karakter string Anda. Ini juga menyederhanakan komunikasi bagi pengguna. Biasanya sulit bagi pengguna untuk memahami mengapa suatu bidang terkadang dapat menyimpan 5 karakter sementara di lain waktu ia menolak string 2 karakter tergantung pada karakter yang merupakan bagian dari string (1 karakter dalam rangkaian karakter UTF-8 dapat memerlukan hingga 3 byte penyimpanan).
Secara default, saat Anda mendeklarasikan kolom
CREATE TABLE foo (
col_name VARCHAR2(5)
);
yang memberitahu Oracle untuk mengizinkan hingga 5 byte data. Namun, jika Anda ingin mengizinkan 5 karakter data terlepas dari jumlah byte, Anda dapat menggunakan semantik panjang karakter
CREATE TABLE foo (
col_name VARCHAR2(5 CHAR)
);
Dengan asumsi Anda ingin melakukan ini untuk semua tabel Anda saat menjalankan DDL, Anda juga dapat mengatur nls_length_semantics
di tingkat sesi sebelum menjalankan DDL Anda
ALTER SESSION SET nls_length_semantics = CHAR;
CREATE TABLE foo (
col_name VARCHAR2(5)
);
membuat tabel dengan kolom yang memungkinkan hingga 5 karakter data.