Chỉnh sửa:Lưu ý rằng cách tốt nhất để xử lý UTF trên Oracle là tạo cơ sở dữ liệu bằng cách sử dụng bộ ký tự cơ sở dữ liệu AL32UTF8 và sử dụng các cột varchar2 thông thường. Một trong những vấn đề khi sử dụng cột nchar là oracle không thể sử dụng chỉ mục cho các cột char / varchar2 thông thường khi các đối số được gửi dưới dạng nchar theo mặc định.
Dù sao:Nếu bạn không thể chuyển đổi cơ sở dữ liệu:
Đầu tiên, các ký tự unicode cần phải có tiền tố là 'n', như sau:
select n'Language - Språk - Język' from dual;
*) Các mã hóa 8 bit không thể xử lý văn bản này
Thật không may, điều đó là không đủ.
Vì một số lý do, hành vi mặc định cho máy khách cơ sở dữ liệu là dịch tất cả các ký tự chuỗi sang bộ ký tự cơ sở dữ liệu, có nghĩa là các giá trị sẽ được thay đổi ngay cả trước khi cơ sở dữ liệu nhìn thấy chuỗi.
Máy khách cần một số cấu hình để có thể chèn ký tự unicode vào cột NCHAR hoặc NVARCHAR:
SQL Plus trên Unix
Các biến environemnet này thiết lập môi trường unix và sqlplus để sử dụng tệp UTF-8 và cũng định cấu hình sqlplus để gửi các ký tự chuỗi trong unicode.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
LC_CTYPE="en_US.UTF-8"
ORA_NCHAR_LITERAL_REPLACE=true
(en_US.UTF-8 dành cho Solaris - Linux hoặc các hệ thống khác có thể cần các chuỗi khác nhau, hãy sử dụng locale -a
để liệt kê các ngôn ngữ được hỗ trợ.)
Trình điều khiển JDBC
Các ứng dụng sử dụng trình điều khiển Oracles JDBC cần phải xác định thuộc tính hệ thống sau để gửi các ký tự chuỗi trong unicode.
-Doracle.jdbc.defaultNChar=true
-Doracle.jdbc.convertNcharLiterals=true
Nhà phát triển SQL
Tìm sqldeveloper.conf và thêm các dòng sau:
AddVMOption -Doracle.jdbc.defaultNChar=true
AddVMOption -Doracle.jdbc.convertNcharLiterals=true
SQL Plus trên Microsoft Windows
Tôi chưa thử xem SQLplus trên Microsoft Windows hoặc Toad có xử lý được utf-8 hay không .qlplusw.exe có thể làm điều đó và cài đặt đăng ký sau có thể thực hiện thủ thuật.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
ORA_NCHAR_LITERAL_REPLACE=true