Skip to content

Insert symbol ke Database Oracle

Kadang kita bingung kenapa tidak bisa melakukan insert karakter simbol (misalnya Ø) ke database Oracle.

SQL> create table test (a varchar2(10));
SQL> insert into test values ('Ø');
SQL> select * from test;
A
----------
?

Lho kok, hasilnya ? bukannya Ø.
Simbol Ø adalah karakter no 216. Coba kita query ke database:

SQL> select chr(216) from dual;
C
-
?

OO.. ternyata masih tidak terbaca. Selidik punya selidik, ternyata ini berkaitan dengan CHARACTER SET di database dan di client di mana kita melakukan query. Untuk bisa melakukan hal itu, database Oracle dan client harus punya CHARACTER SET yang sesuai.

Contoh character set yang mengakomodasi simbol Ø adalah WE8MSWIN1252 dan WE8ISO8859P1, lebih detail silahkan lihat referensi. WE8MSWIN1252 adalah superset dari WE8ISO8859P1, dengan arti lain WE8MSWIN1252 berisi semua karaketer WE8ISO8859P1 dan tambahan lainnya. Kalau saat ini CHARACTER SET database tidak mencakup simbol Ø, sebaiknya gunakan WE8MSWIN1252 daripada WE8ISO8859P1.

Mari kita check apakah database kita sudah menggunakan CHARACTER SET yang sesuai

SQL> col PROPERTY_VALUE for a20
SQL> col PROPERTY_NAME for a20
SQL> select PROPERTY_NAME,PROPERTY_VALUE
from database_properties
where PROPERTY_NAME= 'NLS_CHARACTERSET';

PROPERTY_NAME        PROPERTY_VALUE
-------------------- --------------------
NLS_CHARACTERSET     WE8MSWIN1252

Database sudah menggunakan CHARACTER SET yang sesuai. Tapi tidak bisa menampilkan symbol Ø. Nah kalau gini pasti ada masalah dengan setting di client.

Di UNIX, lihat value dari environment (parameter) NLS_LANG.

echo $NLS_LANG

Yup, ternyata NLS_LANG tidak disetting. Sekarang, setting NLS_LANG

NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252; export NLS_LANG

Sekarang coba jalankan perintah SQLPLUS berikut

SQL> delete from test;
SQL> insert into test values('Ø');
1 row created.
SQL> insert into test values( chr(216) );
1 row created.
SQL> select * from test;
A
----------
Ø
Ø

OO… berhasil :)
Coba kalau NLS_LANG di client kita ganti WE8ISO8859P1, apakah masih bisa:

NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1; export NLS_LANG
SQL> select * from test;
A
----------
Ø
Ø

OO… Ternyata masih bisa juga.

MENGUBAH CHARACTER SET DI DATABASE

Kalau CHARACTER SET di database tidak men-support karakter yang kita inginkan, berikut ini cara mengubah CHARACTER SET (misalkan kita ingin mengubahnya menjadi WE8MSWIN1252) :

SQL> shutdown immediate
SQL> startup mount
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER DATABASE CHARACTER SET WE8MSWIN1252;

Setelah itu, restart database

SQL> shutdown immediate
SQL> startup

Referensi:
Oracle® Database Globalization Support Guide 10g Release 2 (10.2)
Choosing a Character Set
Setting Up a Globalization Support Environment



Silahkan baca yang berikut ini juga :

Post a Comment

Your email is never published nor shared. Required fields are marked *
*
*