Giải quyết vấn đề Unicode trong SQL Developer

Qua một thời gian nghiên cứu, mình đã giải quyết được vấn đề Unicode trong SQL Developer mà không cần chỉnh database charset thành AL32UTF8.

Mở đầu

Mặc định CHAR và VARCHAR2 sẽ có charset là WE8MSWIN1252 (ANSI không hỗ trợ lưu Unicode)
Khi chỉnh database charset thành AL32UTF8 thì kiểu CHAR và VARCHAR2 sẽ lưu được unicode, nhưng do kiểu encode này lớn gấp đôi ANSI nên độ dài tối đa của CHAR và VARCHAR2 sẽ giảm xuống từ 8000 thành 4000.

Lý do thứ 2 dùng nchar và nvarchar2 để lưu trữ unicode là tính tương thích, chắc gì máy của người máy khác mà mình muốn chạy đã set database charset thành AL32UTF8? 

Để biết database mình đang dùng charset gì các bạn dùng câu lệnh sau:

SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';

Giải quyết vấn đề

Vào vấn đề chính mình sẽ dùng kiểu dữ liệu NCHAR và NVARCHAR2 (charset mặc định là AL16UTF16 vì vậy độ dài tối đa giảm còn 2000 ký tự). Nhưng trong khi dùng NCHAR và NVARCHAR2 có nhiều bạn sẽ không dùng câu truy vấn để insert dữ liệu chứa ký tự unicode vào được.
Sau đây chúng ta sẽ cấu hình SQL Developer lại. Các bạn edit file (phải dùng quyền Administrator)
“<DRIVE>:\app\<USER NAME>\product\11.2.0\dbhome_1\sqldeveloper\sqldeveloper\bin\sqldeveloper.conf”
hoặc
“<Thư mục cài SQL Dev>\sqldeveloper\bin\sqldeveloper.conf”

Có thể khác nhau ở nhiều máy, ở đâu mình dùng phiên bản Oracle 11gR2 đã cài sẵn SQL Dev

thêm 2 dòng này vào

AddVMOption -Doracle.jdbc.defaultNChar=true
AddVMOption -Doracle.jdbc.convertNcharLiterals=true

Thế là đã config xong (mình sẽ hỏi lại trợ giảng về việc edit file này)

Từ nay nếu muốn insert unicode thì thêm ký tự N trước chuỗi unicode VD:

drop table ex;

create table EX
( sname nvarchar2(30),
primary key (sname));

insert into EX
values (N'người');

select * from EX;

—————————————————–
Hiện tại thì đã giải quyết xong vấn đề insert unicode.
Bây giờ mình đang nghiên cứu về vấn đề lưu trữ file sql chứa ký tự unicode.

Anh Khoa

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s