Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Chèn các ký tự quốc gia vào cột NCHAR hoặc NVARCHAR oracle không hoạt động

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để lấy ngày hiện tại trong PL / SQL?

  2. Kết nối Oracle với PostgreSQL

  3. Hiểu kết quả của Kế hoạch Giải thích Thực thi trong Nhà phát triển SQL Oracle

  4. Cách tốt nhất để xác định phiên bản ứng dụng khách Oracle mà tôi đang chạy là gì?

  5. Làm thế nào để lấy BLOB từ tệp trong PL / SQL?