Tôi hiểu rằng Oracle hỗ trợ nhiều bộ ký tự, nhưng làm cách nào để xác định xem hệ thống 11g hiện tại mà tôi làm việc có bật chức năng đó không?Làm cách nào để biết liệu hệ thống Oracle của tôi có được đặt để hỗ trợ các ký tự Unicode hoặc nhiều byte không?
Trả lời
SELECT *
FROM v$nls_parameters
WHERE parameter LIKE '%CHARACTERSET';
sẽ hiển thị cho bạn cơ sở dữ liệu và bộ ký tự quốc gia. Tập ký tự cơ sở dữ liệu kiểm soát việc mã hóa dữ liệu trong các cột CHAR
và VARCHAR2
. Nếu cơ sở dữ liệu hỗ trợ Unicode trong các cột đó, bộ ký tự cơ sở dữ liệu phải là AL32UTF8 (hoặc UTF8 trong một số trường hợp hiếm hoi). Tập ký tự quốc gia kiểm soát việc mã hóa dữ liệu trong các cột NCHAR
và NVARCHAR2
. Nếu bộ ký tự cơ sở dữ liệu không hỗ trợ Unicode, bạn có thể lưu trữ dữ liệu Unicode trong các cột với các kiểu dữ liệu này nhưng nói chung thêm độ phức tạp cho hệ thống-- các ứng dụng có thể phải thay đổi để hỗ trợ bộ ký tự quốc gia.
Unicode là một hệ thống mã hóa ký tự xác định mỗi nhân vật trong hầu hết các ngôn ngữ được nói trên thế giới, Hỗ trợ Unicode trong Oracle Database:
Character Set Supported in RDBMS Release Unicode Encoding
AL24UTFFSS 7.2 - 8i UTF-8
UTF8 8.0 - 11g UTF-8
UTFE 8.0 - 11g UTF-EBCDIC
AL32UTF8 9i - 11g UTF-8
AL16UTF16 9i - 11g UTF-16
để đảm bảo cơ sở dữ liệu của bạn là Unicode, xin vui lòng kiểm tra giá trị của tham số "NLS_CHARACTERSET" và phải là AL32UTF8 hoặc AL16UTF16 từ danh sách ở trên.
SQL>
SQL> SELECT * FROM v$nls_parameters WHERE parameter='NLS_CHARACTERSET';
PARAMETER VALUE CON_ID
--------------------------- ------------------- ----------
NLS_CHARACTERSET AL32UTF8 0
Để thay đổi giá trị của thông số, hãy Lấy Fullback lên vì ALTER DATABASE tuyên bố không thể được cuộn lại và việc sử dụng sau báo cáo:
SHUTDOWN IMMEDIATE
STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE CHARACTER SET AL32UTF8;
SHUTDOWN IMMEDIATE;
STARTUP;