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

sự khác biệt giữa NLS_NCHAR_CHARACTERSET và NLS_CHARACTERSET cho Oracle

Nói chung tất cả các điểm của bạn đều đúng. NLS_NCHAR_CHARACTERSET xác định bộ ký tự cho NVARCHAR2 , et. al. trong khi NLS_CHARACTERSET được sử dụng cho VARCHAR2 .

Tại sao bạn có thể thấy các ký tự Trung Quốc với US7ASCII ?

Lý do là, bộ ký tự cơ sở dữ liệu của bạn và bộ ký tự máy khách của bạn (tức là xem NLS_LANG giá trị) đều là US7ASCII . Cơ sở dữ liệu của bạn sử dụng US7ASCII và nó "cho rằng" máy khách cũng gửi dữ liệu bằng US7ASCII . Do đó, nó không thực hiện bất kỳ chuyển đổi nào của các chuỗi, dữ liệu được chuyển từng bit từ máy khách sang máy chủ và ngược lại.

Do đó, bạn có thể sử dụng các ký tự thực sự không được hỗ trợ bởi US7ASCII . Hãy lưu ý, trong trường hợp máy khách của bạn sử dụng bộ ký tự khác (ví dụ:khi bạn sử dụng Trình điều khiển được quản lý ODP.NET trong ứng dụng Windows), dữ liệu sẽ trở thành rác rưởi! Ngoài ra, nếu bạn muốn xem xét việc di chuyển bộ ký tự cơ sở dữ liệu, bạn cũng gặp phải vấn đề tương tự.

Một lưu ý khác:Tôi không nghĩ rằng bạn sẽ nhận được hành vi tương tự với các bộ ký tự khác, ví dụ:nếu cơ sở dữ liệu của bạn và máy khách của bạn đều sử dụng WE8ISO8859P1 Ví dụ. Cũng cần lưu ý rằng bạn thực sự đã cấu hình sai. Cơ sở dữ liệu của bạn sử dụng bộ ký tự US7ASCII , NLS_LANG của bạn giá trị cũng là US7ASCII (rất có thể nó hoàn toàn không được đặt và Oracle mặc định nó thành US7ASCII ) nhưng bộ ký tự thực của SQL * Plus, tương ứng. cmd.exe của bạn thiết bị đầu cuối rất có thể là CP950 hoặc CP936.

Nếu bạn muốn đặt mọi thứ đúng cách, bạn có thể đặt biến môi trường của mình NLS_LANG=.ZHT16MSWIN950 (CP936 dường như không được Oracle hỗ trợ) hoặc thay đổi mã hóa của bạn trước khi chạy sqlplus.exe với lệnh chcp 437 . Với cài đặt thích hợp này, bạn sẽ không thấy bất kỳ ký tự Trung Quốc nào như bạn có thể mong đợi.




  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 để tạo một chuỗi Oracle bắt đầu với giá trị tối đa từ một bảng?

  2. Phiên không hoạt động trong Oracle của JDBC

  3. Các hàm một hàng trong Oracle sql

  4. Spring Batch ORA-08177:không thể tuần tự hóa quyền truy cập cho giao dịch này khi đang chạy một công việc, mức cách ly ĐÃ XỬ LÝ

  5. Cách tránh lỗi đột biến bảng